<?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>35626</bug_id>
          
          <creation_ts>2010-03-02 19:19:31 -0800</creation_ts>
          <short_desc>Implement WebGLContextLostEvent and WebGLContextRestoredEvent</short_desc>
          <delta_ts>2010-11-03 17:07:00 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>abarth</cc>
    
    <cc>cedricv</cc>
    
    <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>195361</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-02 19:19:31 -0800</bug_when>
    <thetext>Per the spec, delivery of WebGLContextLostEvent must be implemented and tested.

On desktop OpenGL it is not currently possible for the context to be &quot;lost&quot;. Discussions are beginning in the OpenGL ARB to add an extension which would allow the OpenGL implementation to lose the context in an asynchronous manner, as can occur on platforms which use EGL. This would allow for more graceful recovery if the GPU is reset for various reasons.

In the interim, we can test the delivery of this event, and application recovery, via failure injection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235391</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-08 11:25:36 -0700</bug_when>
    <thetext>Per recent spec updates, WebGLContextRestoredEvent must also be implemented, as must isContextLost().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235393</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-08 11:26:14 -0700</bug_when>
    <thetext>CONTEXT_LOST_WEBGL must also be added to the enum section, and it must be properly returned once from getError() when the context is lost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235395</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-08 11:29:54 -0700</bug_when>
    <thetext>As part of this work, all WebGLObjects allocated before the context was lost must be invalidated. A generation number or something similar must be added to each object and compared against that of the context when validating incoming arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285815</commentid>
    <comment_count>4</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-09-27 15:39:25 -0700</bug_when>
    <thetext>Assigning to myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302768</commentid>
    <comment_count>5</comment_count>
      <attachid>72519</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-01 10:29:42 -0700</bug_when>
    <thetext>Created attachment 72519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302884</commentid>
    <comment_count>6</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-01 13:28:48 -0700</bug_when>
    <thetext>You need to update the xcodeproj files.

Also, maybe we should have a bool makeContextCurrent() function which checks isContextLost()?

Se we don&apos;t need to modify each gl functions one more time when we fix See https://bugs.webkit.org/show_bug.cgi?id=45851.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302915</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-01 14:10:10 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; You need to update the xcodeproj files.

Will do.
 
&gt; Also, maybe we should have a bool makeContextCurrent() function which checks isContextLost()?

Ah, interesting.  I didn&apos;t realize that refactoring was in the works.

This patch explicitly doesn&apos;t hook up the loseContext/restoreContext functions to anything live.  There&apos;s been a bit of discussion about how best to deliver that event (callbacks, polling, checking makeContextCurent elsewhere) and I wanted to commit this change first as it&apos;s mostly independent and WebGL&apos;s rendering context has a lot of spec-specific behavior under a lost context that needed to be implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302981</commentid>
    <comment_count>8</comment_count>
      <attachid>72572</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-01 15:15:37 -0700</bug_when>
    <thetext>Created attachment 72572
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302983</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-01 15:17:44 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=72572) [details]
&gt; Patch

The change from the original is that the WebCore.xcodeproj was updated and build-webkit was verified to succeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303557</commentid>
    <comment_count>10</comment_count>
      <attachid>72572</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-02 12:36:27 -0700</bug_when>
    <thetext>Comment on attachment 72572
Patch

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

Thanks for working through how to hook this up. It generally looks good but there are a few minor issues. Also, could you consider hooking up the webglcontextcreationerror event in WebGLRenderingContext::create in the case where the GraphicsContext3D creation fails? Also, please file a follow-on bug to actually call the loseContext / restoreContext entry points.

&gt; LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js:287
&gt; +  fillTexture(gl, tex, width, height, color);

Split this change into a separate patch.

&gt; WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:242
&gt; -        return v8::Undefined();
&gt; +        return v8::Null();
&gt;      }
&gt;      if (!succeed)
&gt; -        return v8::Undefined();
&gt; +        return v8::Null();

These changes look unrelated and if so should be split into a separate patch.

&gt; WebCore/html/canvas/WebGLEvent.cpp:16
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.

This is actually not the correct license header. See e.g. WebKit/chromium/tests/PODIntervalTreeTest.cpp for the correct one.

&gt; WebCore/html/canvas/WebGLEvent.cpp:36
&gt; +WebGLEvent::WebGLEvent()

According to the spec this should be named WebGLContextEvent. Please rename it.

&gt; WebCore/html/canvas/WebGLEvent.h:16
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.

Wrong license header.

&gt; WebCore/html/canvas/WebGLEvent.h:38
&gt; +class WebGLEvent : public Event {

WebGLContextEvent.

&gt; WebCore/html/canvas/WebGLEvent.h:54
&gt; +protected:

For the time being, at least, these can be private.

&gt; WebCore/html/canvas/WebGLEvent.idl:17
&gt; + * This library is free software; you can redistribute it and/or
&gt; + * modify it under the terms of the GNU Library General Public
&gt; + * License as published by the Free Software Foundation; either
&gt; + * version 2 of the License, or (at your option) any later version.
&gt; + *
&gt; + * This library is distributed in the hope that it will be useful,
&gt; + * but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; + * Library General Public License for more details.
&gt; + *
&gt; + * You should have received a copy of the GNU Library General Public License
&gt; + * along with this library; see the file COPYING.LIB.  If not, write to
&gt; + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; + * Boston, MA 02110-1301, USA.

Wrong license header.

&gt; WebCore/html/canvas/WebGLEvent.idl:23
&gt; +    ] WebGLEvent : Event {

WebGLContextEvent.

&gt; WebCore/html/canvas/WebGLRenderingContext.idl:555
&gt; +        [StrictTypeChecking, ConvertNullStringTo=Null] DOMString getProgramInfoLog(in WebGLProgram program) raises(DOMException);

These ConvertNullStringTo=Null changes look unrelated and if so should be split off into a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303565</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-02 12:41:28 -0700</bug_when>
    <thetext>(In reply to comment #10)

&gt; Also, please file a follow-on bug to actually call the loseContext /
&gt; restoreContext entry points.

This is filed on the Chromium end at http://crbug.com/61507.  I can also file a matching WebKit bug, but I don&apos;t think it&apos;s necessary.
 
&gt; &gt; LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js:287
&gt; &gt; +  fillTexture(gl, tex, width, height, color);
&gt; 
&gt; Split this change into a separate patch.

Ah, I fixed this as a part of doing my manual testing.  I&apos;ll submit it separately. 
 
&gt; &gt; WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:242
&gt; &gt; -        return v8::Undefined();
&gt; &gt; +        return v8::Null();
&gt; &gt;      }
&gt; &gt;      if (!succeed)
&gt; &gt; -        return v8::Undefined();
&gt; &gt; +        return v8::Null();
&gt; 
&gt; These changes look unrelated and if so should be split into a separate patch.

This implements the part of the WebGL spec that says to return null for some functions in the case of a lost context.

&gt; &gt; WebCore/html/canvas/WebGLRenderingContext.idl:555
&gt; &gt; +        [StrictTypeChecking, ConvertNullStringTo=Null] DOMString getProgramInfoLog(in WebGLProgram program) raises(DOMException);
&gt; 
&gt; These ConvertNullStringTo=Null changes look unrelated and if so should be split off into a separate patch.

This was changed for the same reason as the above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303627</commentid>
    <comment_count>12</comment_count>
      <attachid>72729</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-02 13:52:14 -0700</bug_when>
    <thetext>Created attachment 72729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303669</commentid>
    <comment_count>13</comment_count>
      <attachid>72729</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-02 14:33:28 -0700</bug_when>
    <thetext>Comment on attachment 72729
Patch

Removing r? because I realized I need to touch the js bindings as well as the v8 bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303704</commentid>
    <comment_count>14</comment_count>
      <attachid>72745</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-02 15:03:11 -0700</bug_when>
    <thetext>Created attachment 72745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303767</commentid>
    <comment_count>15</comment_count>
      <attachid>72745</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-02 16:21:15 -0700</bug_when>
    <thetext>Comment on attachment 72745
Patch

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303875</commentid>
    <comment_count>16</comment_count>
      <attachid>72745</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-02 20:50:29 -0700</bug_when>
    <thetext>Comment on attachment 72745
Patch

Rejecting patch 72745 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, 72745]&quot; exit_code: 2
Last 500 characters of output:
3 succeeded at 3747 (offset 14 lines).
Hunk #134 succeeded at 3758 (offset 14 lines).
1 out of 134 hunks FAILED -- saving rejects to file WebCore/html/canvas/WebGLRenderingContext.cpp.rej
patching file WebCore/html/canvas/WebGLRenderingContext.h
patching file WebCore/html/canvas/WebGLRenderingContext.idl
patching file WebCore/platform/graphics/GraphicsContext3D.h

Failed to run &quot;[u&apos;/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Kenneth Russell&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/4987032</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304110</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-03 10:26:32 -0700</bug_when>
    <thetext>Adrienne, looks like you&apos;ll have to regenerate the patch to fix merge conflicts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304146</commentid>
    <comment_count>18</comment_count>
      <attachid>72845</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-03 11:27:24 -0700</bug_when>
    <thetext>Created attachment 72845
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304157</commentid>
    <comment_count>19</comment_count>
      <attachid>72845</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-03 11:38:12 -0700</bug_when>
    <thetext>Comment on attachment 72845
Patch

Let&apos;s try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304162</commentid>
    <comment_count>20</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-03 11:41:12 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 72845 [details])
&gt; Let&apos;s try again.

Thanks.  :)

I think this just collided with the recent change to blend function parameter validation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304193</commentid>
    <comment_count>21</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-03 12:19:37 -0700</bug_when>
    <thetext>OK, I won&apos;t commit anything to WebGLRenderingContext until this lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304315</commentid>
    <comment_count>22</comment_count>
      <attachid>72845</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-03 15:06:09 -0700</bug_when>
    <thetext>Comment on attachment 72845
Patch

The commit queue&apos;s taking too long to handle this patch and it&apos;s already got conflicts again (partly due to a patch I just landed). I&apos;m going to land it by hand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304316</commentid>
    <comment_count>23</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-03 15:07:31 -0700</bug_when>
    <thetext>Committed r71274: &lt;http://trac.webkit.org/changeset/71274&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304319</commentid>
    <comment_count>24</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-03 15:12:08 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Committed r71274: &lt;http://trac.webkit.org/changeset/71274&gt;

Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304361</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-03 16:57:06 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/71274 might have broken SnowLeopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304371</commentid>
    <comment_count>26</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-11-03 17:07:00 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; http://trac.webkit.org/changeset/71274 might have broken SnowLeopard Intel Release (Tests)

This has been filed here: https://bugs.webkit.org/show_bug.cgi?id=48962</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72519</attachid>
            <date>2010-11-01 10:29:42 -0700</date>
            <delta_ts>2010-11-01 15:15:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35626-20101101102941.patch</filename>
            <type>text/plain</type>
            <size>85890</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0YzI4NTczYzk3MmQ4ZGQ2NDZlZGViZWYxYzIxMDdlMTA5YTBmOTJmLi5lZDk2ZWQ4
YzBiMGJmMTY3MzE0YTE3ZjA5NWY0ZWZlMzhkNTI4Y2VlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMTEtMDEgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggdHlwbyBpbiB3ZWJn
bC10ZXN0LXV0aWwuanMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNTYyNgorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dl
YmdsLXRlc3QtdXRpbHMuanM6CisgICAgICAgIChXZWJHTFRlc3RVdGlscyk6CisKIDIwMTAtMTAt
MjggIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMgYi9MYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qcwppbmRleCAw
OWU0YmUwYTNlZWYwMmNlN2I3NjQ3MjE1ZDI1Y2JhNzJkZTBmNTJkLi5mM2U1MjBmYWNmZmIzMjZj
OGU5YjlkNDVkM2RiYjEyMTgzMzMyMDExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qcworKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qcwpAQCAtMjg0
LDcgKzI4NCw3IEBAIHZhciBmaWxsVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB0ZXgsIHdpZHRoLCBo
ZWlnaHQsIGNvbG9yLCBvcHRfbGV2ZWwpIHsKICAqLwogdmFyIGNyZWF0ZUNvbG9yZWRUZXh0dXJl
ID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKSB7CiAgIHZhciB0ZXggPSBnbC5j
cmVhdGVUZXh0dXJlKCk7Ci0gIGZpbGxUZXh0dXJlKGdsLCB0ZXh0LCB3aWR0aCwgaGVpZ2h0LCBj
b2xvcik7CisgIGZpbGxUZXh0dXJlKGdsLCB0ZXgsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKTsKICAg
cmV0dXJuIHRleDsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggZDIzMjVkYzY2YjYwNmY0YTg0MDdjNzhiOWQyNjBhOWZhOGFkN2Y3
MS4uMDg5YjFiYjZiNGM2NGVmZjhjY2JlYzJkNmU1ODgxYWRjYmE3OTdlMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjEg
QEAKKzIwMTAtMTEtMDEgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgbG9z
dCBhbmQgcmVzdG9yZWQgY29udGV4dCBldmVudHMgZm9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dC4K
KyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaG9va2VkIHVwIHlldCwgYnV0IHRoZSBj
b250ZXh0IG5vdyBhY3RzCisgICAgICAgIGFjY29yZGluZyB0byB0aGUgc3BlYyBhcyBpdCBzaG91
bGQgZHVyaW5nIGEgbG9zdCBjb250ZXh0LiAgVGVzdGVkCisgICAgICAgIG1hbnVhbGx5LCBhcyB0
aGVyZSdzIG5vIHByb2dyYW1tYXRpYyB3YXkgdG8gbG9zZSBhIGNvbnRleHQgeWV0LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU2MjYKKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVyc0NhbGxiYWNrKToKKyAgICAgICAgKiBkb20v
RXZlbnROYW1lcy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRXZlbnQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRXZlbnQ6OldlYkdMRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xFdmVudDo6fldlYkdMRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xFdmVudDo6aW5pdEV2ZW50KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEV2ZW50Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xFdmVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRXZlbnQ6OnN0YXR1c01lc3NhZ2UpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMRXZlbnQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmNTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyRGVwdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2Uy
RCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZv
TG9nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVy
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4
UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVu
aWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFZlcnRleEF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmlzQ29udGV4dExvc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
aXNQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmVXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpwb2x5Z29uT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFkZXJD
b21waWxlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnNjaXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
aGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
dGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzdGVuY2lsTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpzdGVuY2lsT3ApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzdGVuY2lsT3BTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTNpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTNpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
Zik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgz
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0
cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2aWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxv
c2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVz
dG9yZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojph
ZGRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWJmSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYmZ2SW1wbCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgor
CiAyMDEwLTEwLTI4ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYzdkY2YxODJlNjQ3ZTYzODk4NGI3ZTE3OGJm
NTY4NWFhNWYzNTlhMy4uZjc2ZjQzY2FjODlmZjMwMTBiOGUyZjgzYmI0ZGYyZGQzM2I2MTUwYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTIxNSw2ICsyMTUsNyBAQAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQWN0
aXZlSW5mby5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlkbCcs
CiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGwnLAor
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMRXZlbnQuaWRsJywKICAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52
YXMvV2ViR0xQcm9ncmFtLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJidWZmZXIuaWRsJywKQEAgLTE4NTQsNiArMTg1NSw4IEBACiAgICAgICAgICAgICAnaHRtbC9j
YW52YXMvV2ViR0xCdWZmZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xFdmVudC5jcHAn
LAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMRXZlbnQuaCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xH
ZXRJbmZvLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKaW5kZXggOTM0NmEwNTQ3Yzg0MWY4
ODQ2M2Y3MzZlNjViODI3MTA5ZmY0ZTY0YS4uYjIyNDBlZGMyY2UwODRmOGMzYjY4YmE0MTQ3ZWNi
Yjk0Zjc4MTc1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJH
TFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcApAQCAtMjM2LDEwICsyMzYsMTAg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRh
Y2hlZFNoYWRlcnNDYWxsYmFjayhjb25zdAogICAgIGJvb2wgc3VjY2VlZCA9IGNvbnRleHQtPmdl
dEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAg
ICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7Ci0gICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogICAgIH0KICAgICBpZiAo
IXN1Y2NlZWQpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVy
biB2ODo6TnVsbCgpOwogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IGFycmF5ID0gdjg6OkFycmF5
OjpOZXcoc2hhZGVycy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBzaGFk
ZXJzLnNpemUoKTsgKytpaSkKICAgICAgICAgYXJyYXktPlNldCh2ODo6SW50ZWdlcjo6TmV3KGlp
KSwgdG9WOChzaGFkZXJzW2lpXSkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRXZlbnROYW1l
cy5oIGIvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCmluZGV4IDY0NDAwMDAxZTE2YWFmYjE1NTk2
Yzc1MDUyMzc1ODE0MWYyMmFmZDguLmFlYWQyYmMxZDI4NDZjNWNiMGZkNjg2ZjY0NjRmZGNkMDc3
OTNmNTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAorKysgYi9XZWJDb3Jl
L2RvbS9FdmVudE5hbWVzLmgKQEAgLTE2OCw3ICsxNjgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIFwKICAgICBtYWNybyh3ZWJraXRmdWxsc2NyZWVuY2hhbmdlKSBcCiAgICAgXAotICAg
IG1hY3JvKHdlYmtpdHNwZWVjaGNoYW5nZSkKKyAgICBtYWNybyh3ZWJraXRzcGVlY2hjaGFuZ2Up
IFwKKyAgICBcCisgICAgbWFjcm8od2ViZ2xjb250ZXh0bG9zdCkgXAorICAgIG1hY3JvKHdlYmds
Y29udGV4dHJlc3RvcmVkKSBcCisgICAgbWFjcm8od2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvcikg
XAogICAgIFwKIC8vIGVuZCBvZiBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0gKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV2ZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xFdmVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmVlY2E0Mjk5NTZlODVjYWU0ZDIwOWQ5NmYx
N2I1YzRjM2I5ZWI0OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xFdmVudC5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJHTEV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViR0xFdmVudDo6V2Vi
R0xFdmVudCgpCit7Cit9CisKK1dlYkdMRXZlbnQ6OldlYkdMRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJpbmcm
IHN0YXR1c01lc3NhZ2UpCisgICAgOiBFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUp
CisgICAgLCBtX3N0YXR1c01lc3NhZ2Uoc3RhdHVzTWVzc2FnZSkKK3sKK30KKworV2ViR0xFdmVu
dDo6fldlYkdMRXZlbnQoKQoreworfQorCit2b2lkIFdlYkdMRXZlbnQ6OmluaXRFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNv
bnN0IFN0cmluZyYgc3RhdHVzTWVzc2FnZSkKK3sKKyAgICBpZiAoZGlzcGF0Y2hlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBFdmVudDo6aW5pdEV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2Fu
Y2VsYWJsZSk7CisgICAgbV9zdGF0dXNNZXNzYWdlID0gc3RhdHVzTWVzc2FnZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEV2ZW50LmggYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXZlbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
ZTVkZGUyMjYwOGNiNmYyZjRhOTA2NmM2MDE2MmZjNjkyMTNmZDkzCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV2ZW50LmgKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViR0xFdmVudF9oCisjZGVmaW5lIFdlYkdMRXZlbnRfaAorCisjaW5jbHVkZSAiRXZlbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJHTEV2ZW50IDogcHVibGljIEV2
ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEV2ZW50PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTEV2ZW50KTsKKyAgICB9
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgU3RyaW5n
JiBzdGF0dXNNZXNzYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJH
TEV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgc3RhdHVzTWVzc2FnZSkpOworICAg
IH0KKyAgICB2aXJ0dWFsIH5XZWJHTEV2ZW50KCk7CisKKyAgICB2b2lkIGluaXRFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNv
bnN0IFN0cmluZyYgc3RhdHVzTWVzc2FnZSk7CisKKyAgICBjb25zdCBTdHJpbmcmIHN0YXR1c01l
c3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1c01lc3NhZ2U7IH0KKworcHJvdGVjdGVkOgor
ICAgIFdlYkdMRXZlbnQoKTsKKyAgICBXZWJHTEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgU3RyaW5nJiBzdGF0dXNN
ZXNzYWdlKTsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9zdGF0dXNNZXNzYWdlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViR0xFdmVudF9oCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXZlbnQuaWRsIGIvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEV2ZW50LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDg1NGY0NGY5NDVhYmI5NDFlZDlkZGFl
Mjk3MWQ3YmQ4ZGNkOWJmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEV2ZW50LmlkbApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRl
cmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD0zRF9DQU5WQVMsCisgICAgXSBXZWJHTEV2ZW50
IDogRXZlbnQgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0YXR1c01l
c3NhZ2U7CisgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgaW5pdEV2ZW50KGluIERP
TVN0cmluZyBldmVudFR5cGVBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluIGJvb2xlYW4gY2FuQnViYmxlQXJnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbmNlbGFibGVBcmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERPTVN0cmluZyBzdGF0dXNN
ZXNzYWdlQXJnKTsKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCmluZGV4IGE0NWFhMWE0MWRkNmE2MGI1YWY4ZWUzY2U1NGYzYmQ5YjQ5
ODk4YjIuLjRhNDdmNTI4MWNkODE1ZWQyZjk1ZGRkYzk3ODk1ZDUxMjA3YjM5ODUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTQ4LDYgKzQ4
LDcgQEAKICNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKICNpbmNsdWRlICJXZWJHTEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJH
TEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdM
UHJvZ3JhbS5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVmZmVyLmgiCkBAIC05OSwxOSArMTAw
LDMyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVuCiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogICAgIDogQ2FudmFzUmVuZGVyaW5n
Q29udGV4dChwYXNzZWRDYW52YXMpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1f
bmVlZHNVcGRhdGUodHJ1ZSkKLSAgICAsIG1fbWFya2VkQ2FudmFzRGlydHkoZmFsc2UpCi0gICAg
LCBtX2FjdGl2ZVRleHR1cmVVbml0KDApCiAgICAgLCBtX3ZpZGVvQ2FjaGUoNCkKLSAgICAsIG1f
cGFja0FsaWdubWVudCg0KQotICAgICwgbV91bnBhY2tBbGlnbm1lbnQoNCkKLSAgICAsIG1fdW5w
YWNrRmxpcFkoZmFsc2UpCi0gICAgLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEoZmFsc2UpCisg
ICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQogewogICAgIEFTU0VSVChtX2NvbnRleHQpOworICAg
IGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCit7CisgICAgbV9uZWVkc1VwZGF0ZSA9IHRydWU7Cisg
ICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOworICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQg
PSAwOworICAgIG1fcGFja0FsaWdubWVudCA9IDQ7CisgICAgbV91bnBhY2tBbGlnbm1lbnQgPSA0
OworICAgIG1fdW5wYWNrRmxpcFkgPSBmYWxzZTsKKyAgICBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEgPSBmYWxzZTsKKyAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOworICAgIG1fYm91bmRFbGVt
ZW50QXJyYXlCdWZmZXIgPSAwOworICAgIG1fY3VycmVudFByb2dyYW0gPSAwOworICAgIG1fZnJh
bWVidWZmZXJCaW5kaW5nID0gMDsKKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAwOworICAg
IG1fdmVydGV4QXR0cmliU3RhdGUuY2xlYXIoKTsKIAogICAgIGludCBudW1Db21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJm51bUNvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMpOworICAgIG1fdGV4dHVyZVVuaXRzLmNsZWFyKCk7CiAgICAgbV90ZXh0
dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwogCiAgICAgaW50
IG51bVZlcnRleEF0dHJpYnMgPSAwOwpAQCAtMTk5LDYgKzIxMyw4IEBAIGludCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnNpemVJbkJ5dGVzKGludCB0eXBlKQogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybjsKICAgICBpZiAodGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCA+PSBtX3RleHR1cmVVbml0cy5zaXplKCkpIHsKICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjExLDcgKzIyNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwg
IXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hh
ZGVyKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNo
YWRlcikpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtMjI1LDcgKzI0MSw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBX
ZWJHTFNoYWRlciogc2hhCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1
cm47CiAgICAgbV9jb250ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dy
YW0pLCBpbmRleCwgbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
QEAgLTIzNCw2ICsyNTAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJp
YkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMQnVm
ZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChidWZm
ZXIgJiYgYnVmZmVyLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgIHJldHVybjsKQEAgLTI2Miw2ICsyODAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZl
cgogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAg
ICAgIHJldHVybjsKICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29udGV4dCgpICE9IHRoaXMp
IHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CkBAIC0yODAsNiArMzAwLDgg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmYKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
aW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciog
cmVuZGVyQnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAocmVu
ZGVyQnVmZmVyICYmIHJlbmRlckJ1ZmZlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICByZXR1cm47CkBAIC0yOTcsNiArMzE5LDggQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQs
IFdlYkdMUmVuZGVyYnUKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybjsKICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5jb250ZXh0KCkg
IT0gdGhpcykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKQEAgLTMzMCwx
MyArMzU0LDE1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZSh1bnNp
Z25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0CiAKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpibGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJs
dWUsIGRvdWJsZSBhbHBoYSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb250ZXh0LT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvbih1bnNpZ25lZCBsb25nIG1vZGUpCiB7Ci0g
ICAgaWYgKCF2YWxpZGF0ZUJsZW5kRXF1YXRpb24obW9kZSkpCisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGUpKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CkBAIC0zNDQsNyArMzcwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9uZyBtb2RlKQogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9kZVJH
QiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpCiB7Ci0gICAgaWYgKCF2YWxpZGF0ZUJsZW5kRXF1
YXRpb24obW9kZVJHQikgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlQWxwaGEpKQorICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlUkdCKSB8
fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGVBbHBoYSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0zNTMsMTIgKzM3OSwxNiBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2ln
bmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2ZhY3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKQog
eworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfSAgICAgICAKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJs
ZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJH
QiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSkKIHsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5i
bGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMzY2LDYgKzM5Niw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBs
b25nIHNyY1JHQiwgdW5zaWduZWQgbG9uCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVm
ZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVuc2lnbmVkIGxvbmcgdXNh
Z2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdldCwgdXNhZ2UpOwogICAgIGlm
ICghYnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC0zODMsNiArNDE1LDggQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBz
aXplLCB1bnNpZ25lZAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodW5z
aWduZWQgbG9uZyB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCB1bnNpZ25lZCBsb25nIHVzYWdl
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBXZWJHTEJ1ZmZlciogYnVmZmVy
ID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQsIHVzYWdlKTsKICAgICBpZiAo
IWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpAQCAtNDAwLDYgKzQzNCw4IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBBcnJheUJ1
ZmZlciogZGF0YSwKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNh
Z2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdldCwgdXNhZ2UpOwogICAgIGlm
ICghYnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC00MTcsNiArNDUzLDggQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIEFycmF5
QnVmZmVyVmlldyogZGEKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRh
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2
YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
QVRJQ19EUkFXKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpAQCAtNDM0LDYg
KzQ3Miw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgQXJyCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIEFy
cmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAg
V2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAgIGlmICghYnVmZmVyKQogICAg
ICAgICByZXR1cm47CkBAIC00NTAsNiArNDkwLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBBcnIK
IAogdW5zaWduZWQgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJT
dGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9VTlNVUFBPUlRF
RDsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgewog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0pOwogICAgICAgICByZXR1cm4gMDsKQEAgLTQ2Miw2ICs1MDQsOCBAQCB1bnNp
Z25lZCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1
bnNpZ25lZCBsb25nIHRhcmdldAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIo
dW5zaWduZWQgbG9uZyBtYXNrKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybjsKICAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZF
Ul9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICBy
ZXR1cm47CkBAIC00NzIsNiArNTE2LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJsZSBnLCBkb3VibGUgYiwgZG91YmxlIGEpCiB7CisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChpc25hbihyKSkK
ICAgICAgICAgciA9IDA7CiAgICAgaWYgKGlzbmFuKGcpKQpAQCAtNDg2LDE4ICs1MzIsMjQgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJsZSBn
LCBkb3VibGUgYiwgZG91YmxlIGEpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVh
ckRlcHRoKGRvdWJsZSBkZXB0aCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAg
ICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGRlcHRoKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2xlYXJTdGVuY2lsKGxvbmcgcykKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAg
ICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwocyk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhh
KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2Nv
bnRleHQtPmNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTUwNSw3ICs1NTcsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJs
dWUsIGJvb2wgYWxwaAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIo
V2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCiAgICAgICAg
IHJldHVybjsKICAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIob2JqZWN0T3JaZXJvKHNoYWRl
cikpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC01MTMsNiArNTY1
LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFk
ZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNp
Z25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQogeworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1Bh
cmFtZXRlcnModGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJv
cmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJl
QmluZGluZyh0YXJnZXQsIHRydWUpOwpAQCAtNTQwLDYgKzU5NCw4IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBs
ZXZlbCwgdW5zCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2Uy
RCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlv
ZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25n
IGhlaWdodCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAg
ICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgdHJ1
ZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKQEAgLTU1Nyw2ICs2MTMsOCBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGxvbmcgbGV2ZWwsCiAKIFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQorICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG8gPSBXZWJHTEJ1
ZmZlcjo6Y3JlYXRlKHRoaXMpOwogICAgIGFkZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4g
bzsKQEAgLTU2NCw2ICs2MjIsOCBAQCBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCiAgICAgICAgIAogUGFzc1JlZlB0cjxXZWJHTEZy
YW1lYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8
V2ViR0xGcmFtZWJ1ZmZlcj4gbyA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsKICAg
ICBhZGRPYmplY3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87CkBAIC01NzEsNiArNjMxLDggQEAg
UGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUZyYW1lYnVmZmVyKCkKIAogUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdMVGV4dHVy
ZTo6Y3JlYXRlKHRoaXMpOwogICAgIGFkZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsK
QEAgLTU3OCw2ICs2NDAsOCBAQCBQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKIAogUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCiB7CisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4gbyA9
IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOwogICAgIGFkZE9iamVjdChvLmdldCgpKTsKICAg
ICByZXR1cm4gbzsKQEAgLTU4NSw2ICs2NDksOCBAQCBQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkKIAogUGFzc1JlZlB0cjxXZWJH
TFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIo
KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiAwOwogICAgIFJl
ZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhp
cyk7CiAgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJldHVybiBvOwpAQCAtNTkzLDYgKzY1
OSw4IEBAIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgICAgICByZXR1cm4gMDsKICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6VkVSVEVYX1NIQURFUiAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9T
SEFERVIpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC02MDUsMTMgKzY3
MywxNSBAQCBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUsCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCiB7CisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+Y3VsbEZhY2UobW9kZSk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQogewotICAgIGlm
ICghYnVmZmVyKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWJ1ZmZlcikKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIGJ1ZmZlci0+ZGVsZXRlT2JqZWN0KCk7CkBAIC02MzMsNyArNzAz
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZl
ciogYnVmZmVyKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZm
ZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCiB7Ci0gICAgaWYgKCFmcmFtZWJ1ZmZl
cikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFmcmFtZWJ1ZmZlcikKICAgICAgICAgcmV0
dXJuOwogICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX2ZyYW1lYnVmZmVyQmluZGluZykgewogICAg
ICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7CkBAIC02NDUsNyArNzE1LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIq
IGZyYW1lYnVmZmVyKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUHJvZ3Jh
bShXZWJHTFByb2dyYW0qIHByb2dyYW0pCiB7Ci0gICAgaWYgKCFwcm9ncmFtKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXByb2dyYW0pCiAgICAgICAgIHJldHVybjsKICAgICBpZiAocHJv
Z3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtNjU4LDcg
KzcyOCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFtKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVJl
bmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQogewotICAgIGlmICgh
cmVuZGVyYnVmZmVyKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXJlbmRlcmJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmIChyZW5kZXJidWZmZXIgPT0gbV9yZW5kZXJidWZmZXJC
aW5kaW5nKQogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAwOwpAQCAtNjY5LDcgKzcz
OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoV2Vi
R0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQogewotICAgIGlmICghc2hhZGVy
KQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXNoYWRlcikKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIHNoYWRlci0+ZGVsZXRlT2JqZWN0KCk7CkBAIC02NzcsNyArNzQ3LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVy
KQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1
cmUqIHRleHR1cmUpCiB7Ci0gICAgaWYgKCF0ZXh0dXJlKQorICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXRleHR1cmUpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICB0ZXh0dXJlLT5kZWxl
dGVPYmplY3QoKTsKQEAgLTY4NywxOCArNzU3LDI0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMpCiB7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+ZGVwdGhG
dW5jKGZ1bmMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aE1hc2soYm9vbCBmbGFnKQogeworICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmRlcHRo
TWFzayhmbGFnKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhSYW5nZShkb3VibGUgek5lYXIsIGRvdWJs
ZSB6RmFyKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAg
ICBtX2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC03MDYsNyArNzgyLDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcikKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVy
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hhZGVyKHNoYWRl
cikpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtNzIwLDcgKzc5Niw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJH
TFNoYWRlciogc2hhCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKHVuc2ln
bmVkIGxvbmcgY2FwKQogewotICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAg
IHJldHVybjsKICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtNzI5LDYgKzgwNSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0
ZXhBdHRyaWJzKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC05MjUsNyAr
MTAwMyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKHVuc2lnbmVk
IGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VuCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKIAotICAgIGlmICghdmFsaWRhdGVEcmF3TW9kZShtb2RlKSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKG1vZGUpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoZmlyc3QgPCAwIHx8IGNvdW50IDwgMCkgewpAQCAtOTY2LDcgKzEwNDQsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwg
bG9uZyBjb3VudCwgdW5zaWduZQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAKLSAgICBpZiAo
IXZhbGlkYXRlRHJhd01vZGUobW9kZSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVEcmF3TW9kZShtb2RlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dpdGNoICh0eXBl
KSB7CkBAIC0xMDIzLDcgKzExMDEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBjb3VudCwgdW5zaWduZQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQogewotICAg
IGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRl
eHQtPmVuYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBA
IC0xMDMyLDYgKzExMTAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKHVu
c2lnbmVkIGxvbmcgY2FwKQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAg
cmV0dXJuOwogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwNDgsNiArMTEyOCw4IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGlu
ZGV4LCBFeGNlcHRpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmaW5pc2goKQogewor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQt
PmZpbmlzaCgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KQEAgLTEw
NTUsNiArMTEzNyw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmaW5pc2goKQogCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2goKQogeworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQpAQCAtMTA2Miw3ICsxMTQ2LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZsdXNoKCkKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2Vi
R0xSZW5kZXJidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyh0
YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRl
RnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGF0dGFjaG1lbnQpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CkBAIC0xMTE0LDcgKzExOTgsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWduZWQg
bG9uZyB0YXJnZXQsIHVuc2lnbgogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1l
bnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIGxvbmcg
bGV2ZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKCF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50
KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1Bh
cmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChs
ZXZlbCkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKQEAgLTExMzgsMTIgKzEyMjIsMTYgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNlKHVu
c2lnbmVkIGxvbmcgbW9kZSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb250ZXh0LT5mcm9udEZhY2UobW9kZSk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
bmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQogeworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRl
VGV4dHVyZUJpbmRpbmcodGFyZ2V0LCBmYWxzZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJl
dHVybjsKQEAgLTExNzIsOSArMTI2MCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkKIFBhc3NSZWZQdHI8V2ViR0xBY3Rp
dmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICghdmFs
aWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gMDsKKyAgICBBY3Rp
dmVJbmZvIGluZm87CiAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZUF0dHJpYihvYmplY3RP
clplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0
dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNp
emUpOwpAQCAtMTE4Myw5ICsxMjcxLDkgQEAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSoKIFBhc3NS
ZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVu
aWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIEFjdGl2ZUluZm8gaW5m
bzsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0
dXJuIDA7CisgICAgQWN0aXZlSW5mbyBpbmZvOwogICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3Rp
dmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8pKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKQEAgLTExOTgsNyArMTI4Niw3
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBWZWN0b3I8V2ViCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAg
ICBzaGFkZXJPYmplY3RzLmNsZWFyKCk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHBy
b2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
cHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbnQgbnVtU2hhZGVycyA9IDA7
CiAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFw
aGljc0NvbnRleHQzRDo6QVRUQUNIRURfU0hBREVSUywgJm51bVNoYWRlcnMpOwpAQCAtMTIyMywx
MiArMTMxMSwxNiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFk
ZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVjdG9yPFdlYgogCiBpbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1
cm4gLTE7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBuYW1lKTsKIH0KIAogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
ICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIgJiYgdGFy
Z2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikgewogICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0pOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CkBAIC0xMjQ5LDYgKzEzNDEs
OCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVucwogCiBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQog
eworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiAwOwogICAgIC8vIFdl
IGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIG9iamVj
dCB0bwogICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRhdGluZyBhbnkgY2FjaGVkIHZl
cnNpb24uCiAgICAgcmV0dXJuIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZShtX2NvbnRl
eHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOwpAQCAtMTI2Miw3ICsxMzU2LDcgQEAgdW5zaWdu
ZWQgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEVycm9yKCkKIFdlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBs
b25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmICghdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgYXR0YWNo
bWVudCkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1
bmNQYXJhbWV0ZXJzKHRhcmdldCwgYXR0YWNobWVudCkpCiAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKQEAgLTEzMTAsNiArMTQwNCw4
IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcih1bnNpZ25lZCBsCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRo
aXMsIGZhbHNlKTsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUNUSVZFX1RFWFRVUkU6CkBAIC0xNTAxLDcgKzE1OTcsNyBAQCBXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyBwbmFtZSwg
RXhjZXB0aW9uQwogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3Jh
bVBhcmFtZXRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKIAogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CkBAIC0xNTMwLDggKzE2
MjYsOCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFy
YW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdQogU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJH
TE9iamVjdChwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuICIiOworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIHJldHVy
biBtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CiB9
CkBAIC0xNTM5LDYgKzE2MzUsOCBAQCBTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQ
cm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbgogV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwpAQCAtMTU3Miw3ICsxNjcwLDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFy
Z2UKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRl
cihXZWJHTFNoYWRlciogc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9i
amVjdChzaGFkZXIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xP
YmplY3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIFdlYkdM
U3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgaW50IHZhbHVlID0gMDsKQEAgLTE1OTcs
OCArMTY5NSw4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRl
clBhcmFtZXRlcihXZWJHTFNoYWRlciogc2hhZGVyLCB1bnNpCiBTdHJpbmcgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdl
YkdMT2JqZWN0KHNoYWRlcikpCi0gICAgICAgIHJldHVybiAiIjsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIHJldHVy
biBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpOwogfQpA
QCAtMTYwNiw4ICsxNzA0LDggQEAgU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hh
ZGVySW5mb0xvZyhXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2QKIFN0cmluZyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFs
aWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQotICAgICAgICByZXR1cm4gIiI7CisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKICAg
ICByZXR1cm4gbV9jb250ZXh0LT5nZXRTaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRlcikp
OwogfQpAQCAtMTYxNSw2ICsxNzEzLDggQEAgU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUKIFdlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRl
eHR1cmVCaW5kaW5nKHRhcmdldCwgZmFsc2UpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CkBAIC0xNjM2LDcgKzE3MzYsNyBAQCBXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbgogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybShX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB1bmlmb3Jt
TG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKICAgICBpZiAoIXVuaWZvcm1Mb2NhdGlvbikgewogICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
KTsKQEAgLTE3ODAsNyArMTg4MCw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHCiBQYXNzUmVm
UHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZv
cm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlk
YXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgV2ViR0xT
dGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKICAgICBsb25nIHVuaWZvcm1Mb2NhdGlvbiA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7
CkBAIC0xNzkyLDYgKzE4OTIsOCBAQCBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTAogV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcg
aW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAg
ICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewogICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKQEAg
LTE4MzksNiArMTk0MSw4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lCiAKIGxvbmcgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRl
eCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAg
ICAgICByZXR1cm4gMDsKICAgICBsb25nIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0
cmliT2Zmc2V0KGluZGV4LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTg0Niw2ICsxOTUwLDggQEAgbG9uZyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGlu
ZGV4LCB1bnNpZ25lZAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludCh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKQogeworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpHRU5FUkFURV9NSVBNQVBfSElOVCkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1
cm47CkBAIC0xODU2LDIyICsxOTYyLDI3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpo
aW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpCiAKIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc0J1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQogewotICAg
IGlmICghYnVmZmVyKQorICAgIGlmICghYnVmZmVyIHx8IGlzQ29udGV4dExvc3QoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNCdWZmZXIoYnVmZmVy
LT5vYmplY3QoKSk7CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRM
b3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0TG9zdDsKK30KKwogYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCkKIHsKLSAgICBp
ZiAoIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQorICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5
KGNhcCkgfHwgaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0
dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQogewot
ICAgIGlmICghZnJhbWVidWZmZXIpCisgICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCBpc0NvbnRleHRM
b3N0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBtX2NvbnRleHQtPmlz
RnJhbWVidWZmZXIoZnJhbWVidWZmZXItPm9iamVjdCgpKTsKQEAgLTE4NzksNyArMTk5MCw3IEBA
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZm
ZXIqIGZyYW1lYnVmZmVyKQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNQcm9ncmFt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBpZiAoIXByb2dyYW0pCisgICAgaWYgKCFw
cm9ncmFtIHx8IGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIG1fY29udGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKQEAgLTE4ODcs
NyArMTk5OCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtKQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNSZW5kZXJi
dWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKIHsKLSAgICBpZiAoIXJlbmRl
cmJ1ZmZlcikKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBtX2NvbnRleHQtPmlzUmVuZGVyYnVmZmVy
KHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOwpAQCAtMTg5NSw3ICsyMDA2LDcgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5k
ZXJidWZmZXIpCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1NoYWRlcihXZWJHTFNo
YWRlciogc2hhZGVyKQogewotICAgIGlmICghc2hhZGVyKQorICAgIGlmICghc2hhZGVyIHx8IGlz
Q29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNTaGFkZXIoc2hhZGVyLT5vYmplY3QoKSk7CkBAIC0xOTAzLDcgKzIwMTQsNyBAQCBi
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikK
IAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUqIHRl
eHR1cmUpCiB7Ci0gICAgaWYgKCF0ZXh0dXJlKQorICAgIGlmICghdGV4dHVyZSB8fCBpc0NvbnRl
eHRMb3N0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBtX2NvbnRleHQt
PmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7CkBAIC0xOTExLDYgKzIwMjIsOCBAQCBib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkK
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmVXaWR0aChkb3VibGUgd2lkdGgpCiB7
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4
dC0+bGluZVdpZHRoKChmbG9hdCkgd2lkdGgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CkBAIC0xOTE4LDcgKzIwMzEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bGluZVdpZHRoKGRvdWJsZSB3aWR0aCkKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHBy
b2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
cHJvZ3JhbSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkg
ewogICAgICAgICBpZiAoIXByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfU0hBREVSKSB8fCAhcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikpIHsKQEAgLTE5MzgsNiArMjA1MSw4IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dy
YW0sIEV4Y2VwdGlvbkNvZGUmIGVjCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwaXhl
bFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKQogeworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKICAgICAgICAgbV91
bnBhY2tGbGlwWSA9IHBhcmFtOwpAQCAtMTk2NCwxMiArMjA3OSwxNiBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJh
bSkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBvbHlnb25PZmZzZXQoZG91YmxlIGZh
Y3RvciwgZG91YmxlIHVuaXRzKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybjsKICAgICBtX2NvbnRleHQtPnBvbHlnb25PZmZzZXQoKGZsb2F0KSBmYWN0b3IsIChm
bG9hdCkgdW5pdHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCBs
b25nIHdpZHRoLCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxv
bmcgdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoIWNhbnZh
cygpLT5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAg
ICByZXR1cm47CkBAIC0yMDM3LDEyICsyMTU2LDE2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwK
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCiB7
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4
dC0+cmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0
b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQs
IHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogeworICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2ggKGludGVybmFsZm9y
bWF0KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6CkBAIC0yMDY1LDEyICsyMTg4LDE2IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
YW1wbGVDb3ZlcmFnZShkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0KQogeworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnNhbXBsZUNvdmVy
YWdlKChmbG9hdCkgdmFsdWUsIGludmVydCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNjaXNzb3IobG9uZyB4
LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogewor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQt
PnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KQEAgLTIwNzgsNyArMjIwNSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVy
KiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIp
KQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVy
KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG9iamVjdE9y
WmVybyhzaGFkZXIpLCBzdHJpbmcpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CkBAIC0yMDg2LDM2ICsyMjEzLDQ4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
aGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpCiAKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMs
IGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywgcmVm
LCBtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25n
IGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykK
IHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250
ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayht
YXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZh
Y2UsIHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAg
ICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1h
c2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25l
ZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQogeworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWlsLCB6
ZmFpbCwgenBhc3MpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBs
b25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWdu
ZWQgbG9uZyB6cGFzcykKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1
cm47CiAgICAgbV9jb250ZXh0LT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwg
enBhc3MpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yMTY3
LDcgKzIzMDYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1bnNp
Z25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5z
aWduZWQgYm9yZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNEYXRhKHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxz
KSkKICAgICAgICAgcmV0dXJuOwogICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBwaXhlbHMtPmJh
c2VBZGRyZXNzKCkgOiAwOwogICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKQEAgLTIxOTQs
NiArMjMzMyw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEltYWdl
RGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFZlY3Rvcjx1aW50OF90PiBk
YXRhOwogICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0
LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7
CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOwpAQCAtMjIxMSw2ICsyMzUyLDggQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWduZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZv
cm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsKICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKQEAgLTIyMjQsNiArMjM2Nyw4IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+YnVm
ZmVyKCkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKQEAgLTIyNTYsNiArMjQw
MSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxWaWRlb0Vs
ZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbyk7CiAgICAgaWYgKCF2aWRlbykKICAgICAgICAg
cmV0dXJuOwpAQCAtMjI2NCw2ICsyNDExLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQKIAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQgcGFyYW1mLCBpbnQgcGFyYW1pLCBib29s
IGlzRmxvYXQpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwog
ICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIGZh
bHNlKTsKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjMwOSw2ICsyNDU4LDgg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHUKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBp
Z25vcmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRB
bmRUeXBlKGZvcm1hdCwgdHlwZSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXZhbGlkYXRl
VGV4dHVyZUJpbmRpbmcodGFyZ2V0LCB0cnVlKSkKQEAgLTIzMjIsNiArMjQ3Myw4IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbCh1bnNpZ25lZCB0YXJnZXQs
IHVuc2lnbmVkIGxldmVsLCB1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW1hZ2UqIGltYWdlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgaWYg
KCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlwZSwgZmxpcFks
IHByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwpAQCAtMjMzNSw3ICsy
NDg4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWcKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVu
c2lnbmVkIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0RhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVGV4RnVu
Y0RhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICByZXR1
cm47CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscyA/IHBpeGVscy0+YmFzZUFkZHJlc3MoKSA6IDA7
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOwpAQCAtMjM2MSw2ICsyNTE0LDggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgdW5zaWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgaWYg
KCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1fdW5w
YWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSk7CkBAIC0yMzc0LDYgKzI1MjksOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNp
Z25lZCB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkgewogICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4Nyw2ICsyNTQ0LDggQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZl
bCwgdW5zaWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybjsKICAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5idWZmZXIoKSkg
ewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQwMCw2ICsyNTU5LDggQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0
LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTFZpZGVvRWxlbWVu
dCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvKTsKICAgICBpZiAoIXZpZGVvKQogICAgICAgICByZXR1
cm47CkBAIC0yNDA5LDcgKzI1NzAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZwogdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFt
KCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtMjQyNCw3ICsyNTg1LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIGZsb2EKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMSkpCisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSk7CkBAIC0yNDM0LDcgKzI1OTUsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEZsbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNp
emUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9u
LCB2LCBzaXplLCAxKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3Jt
MWZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplKTsKQEAgLTI0NDQsNyArMjYwNSw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50IHgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlv
bikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpA
QCAtMjQ1OSw3ICsyNjIwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwg
diwgMSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycyhsb2NhdGlvbiwgdiwgMSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+
dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSk7
CkBAIC0yNDY5LDcgKzI2MzAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludAogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2Nh
dGlvbiwgdiwgc2l6ZSwgMSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6
ZSk7CkBAIC0yNDc5LDcgKzI2NDAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludAogdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9u
LT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtMjQ5NCw3ICsyNjU1LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIGZsb2EKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5
KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
ICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMikpCisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwg
MikpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwpAQCAtMjUwNCw3ICsy
NjY1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxv
YXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6
ZSwgMikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29u
dGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDIpOwpAQCAt
MjUxNCw3ICsyNjc1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG8KIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFs
b2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkg
IT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtMjUyOSw3ICsyNjkwLDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMikpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
di0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwpAQCAtMjUzOSw3ICsyNzAwLDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBJbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYs
IHNpemUsIDIpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAyKTsKQEAgLTI1NDksNyArMjcxMCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0
aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNTY0LDcgKzI3MjUsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgZmxvYQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2
LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CkBAIC0yNTc0LDcgKzI3MzUsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEZsbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2
LCBzaXplLCAzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMyk7CkBAIC0yNTg0LDcgKzI3NDUsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCB4LCBpbnQg
eSwgaW50IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFsb2NhdGlvbikK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJy
ZW50UHJvZ3JhbSkgewpAQCAtMjU5OSw3ICsyNzYwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGlu
dAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycyhsb2NhdGlvbiwgdiwgMykpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMykpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgp
LCB2LT5sZW5ndGgoKSAvIDMpOwpAQCAtMjYwOSw3ICsyNzcwLDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBJbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDMpKQorICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDMp
KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24t
PmxvY2F0aW9uKCksIHYsIHNpemUgLyAzKTsKQEAgLTI2MTksNyArMjc4MCw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgaW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgeiwgZmxvYXQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0
aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNjM0LDcgKzI3OTUsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgZmxvYQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCA0KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCA0KSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2
LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CkBAIC0yNjQ0LDcgKzI4MDUsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEZsbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2
LCBzaXplLCA0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gNCk7CkBAIC0yNjU0LDcgKzI4MTUsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCB4LCBpbnQg
eSwgaW50IHosIGludCB3LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmICghbG9jYXRpb24pCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhbG9j
YXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9
IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTI2NjksNyArMjgzMCw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBpbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDQpKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYt
PmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKQEAgLTI2NzksNyArMjg0MCw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgSW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBz
aXplLCA0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gNCk7CkBAIC0yNjg5LDcgKzI4NTAsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIGludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRy
YW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhs
b2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDQp
KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMjY5OCw3ICsyODU5LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9v
bCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkpCisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJh
bnNwb3NlLCB2LCBzaXplLCA0KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXplIC8g
NCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTI3MDcsNyArMjg2
OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IGJvb2wgdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDkpKQorICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9z
ZSwgdiwgOSkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgz
ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgo
KSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0yNzE2LDcg
KzI4NzcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpbwogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA5KSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYs
IHNpemUgLyA5KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMjcy
NSw3ICsyODg2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgz
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW8KIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgMTYpKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24s
IHRyYW5zcG9zZSwgdiwgMTYpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCkgLyAxNik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
QEAgLTI3MzQsNyArMjg5NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
TWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2
KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2KSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
dHJhbnNwb3NlLCB2LCBzaXplIC8gMTYpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CkBAIC0yNzQzLDYgKzI5MDQsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpbwogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAocHJvZ3JhbSAmJiBwcm9n
cmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJl
dHVybjsKQEAgLTI3NjYsNyArMjkyOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuOwogICAg
IG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTI4MzUsNiArMjk5OCw4IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBp
bmRleCwgZmxvYXQqIHYsIGludCBzCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZGV4LCBsb25nIHNpemUsIHVuc2lnbmVkIGxv
bmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLCBsb25nIHN0cmlkZSwgbG9uZyBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0
dHJpYnMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4NzksNiArMzA0
NCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVu
c2lnbmVkIGxvbmcgaW5kZXgsIGxvbmcgc2l6ZSwKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1
cm47CiAgICAgaWYgKGlzbmFuKHgpKQogICAgICAgICB4ID0gMDsKICAgICBpZiAoaXNuYW4oeSkp
CkBAIC0yODkxLDYgKzMwNTgsNDQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdw
b3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ24KICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bG9zZUNvbnRleHQoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fY29udGV4dExvc3QgPSB0cnVlOworCisgICAgZGV0YWNoQW5kUmVt
b3ZlQWxsT2JqZWN0cygpOworCisgICAgLy8gVGhlcmUgaXMgbm8gZGlyZWN0IHdheSB0byBjbGVh
ciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0aW9uIGFuZAorICAgIC8vIGxvb3BpbmcgdW50
aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRlIGxv
b3AgaWYKKyAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQgaW1wbGVtZW50YXRpb24gaGFkIGEg
YnVnLiAgU28sIGxvb3AgYSByZWFzb25hYmx5CisgICAgLy8gbGFyZ2UgbnVtYmVyIG9mIHRpbWVz
IHRvIGNsZWFyIGFueSBleGlzdGluZyBlcnJvcnMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAx
MDA7ICsraSkgeworICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNz
Q29udGV4dDNEOjpOT19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1Rf
V0VCR0wpOworCisgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoV2ViR0xFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZUNvbnRleHQoKQoreworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgcmVu
ZGVyaW5nIGNvbnRleHQgaXMgbm90IHJlc3RvcmVkIGlmIHRoZXJlIGlzIG5vIGhhbmRsZXIgZm9y
CisgICAgLy8gdGhlIGNvbnRleHQgcmVzdG9yZWQgZXZlbnQuCisgICAgaWYgKCFjYW52YXMoKS0+
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmdsY29udGV4dHJlc3RvcmVkRXZlbnQp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOworCisgICAg
bV9jb250ZXh0TG9zdCA9IGZhbHNlOworICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KFdlYkdM
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0cmVzdG9yZWRFdmVudCwgZmFs
c2UsIHRydWUsICIiKSk7Cit9CisKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVP
YmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKIHsKICAgICBtX2NhbnZhc09iamVjdHMucmVtb3Zl
KG9iamVjdCk7CkBAIC0yODk4LDYgKzMxMDMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVtb3ZlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCiAKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjphZGRPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKIHsKKyAgICBBU1NFUlQo
IWlzQ29udGV4dExvc3QoKSk7CiAgICAgcmVtb3ZlT2JqZWN0KG9iamVjdCk7CiAgICAgbV9jYW52
YXNPYmplY3RzLmFkZChvYmplY3QpOwogfQpAQCAtMzQ5MSw2ICszNjk3LDggQEAgV2ViR0xCdWZm
ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh1
bnNpZ25lZCBsb25nIHQKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YmZJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBleHBlY3RlZFNpemUsIGZsb2F0IHYwLCBm
bG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7
CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC0zNTIzLDYgKzM3MzEsOCBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZkltcGwodW5zaWduZWQgbG9u
ZyBpbmRleCwgaW50IGV4cGVjdGVkUwogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliZnZJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdiwgaW50
IGV4cGVjdGVkU2l6ZSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1
cm47CiAgICAgaWYgKCF2KSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC0z
NTMyLDYgKzM3NDIsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
ZnZJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheQogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZs
b2F0KiB2LCBpbnQgc2l6ZSwgaW50IGV4cGVjdGVkU2l6ZSkKIHsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2KSB7CiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwog
ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaAppbmRleCBjZTY2ZjZhMzRhMjhhMTE3NDQ1ZTBhY2E4NGI5MDNjNjFhMzdkMmUzLi4yNGQw
ZjVlNmM2MjE1YWYyYzg2NWJiODdlZTIwYmFjOWFjNjYxYjcyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTE3Niw2ICsxNzYsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9k
ZSk7CiAgICAgYm9vbCBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOworICAgIGJvb2wgaXNDb250ZXh0
TG9zdCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKTsKICAg
ICBib29sIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwogICAgIGJvb2wgaXNQcm9n
cmFtKFdlYkdMUHJvZ3JhbSopOwpAQCAtMjc3LDYgKzI3OCw5IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KTsKIAorICAgIHZvaWQgbG9zZUNvbnRleHQoKTsKKyAgICB2b2lkIHJlc3Rv
cmVDb250ZXh0KCk7CisKICAgICBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0Qo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCk7IH0KQEAgLTI5Miw2ICsy
OTYsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMT2JqZWN0OwogCiAgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4pOworICAgIHZvaWQgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKIAogICAgIHZv
aWQgYWRkT2JqZWN0KFdlYkdMT2JqZWN0Kik7CiAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxP
YmplY3RzKCk7CkBAIC0zMzMsOCArMzM4LDYgQEAgcHVibGljOgogICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIGJvb2wgbV9uZWVkc1VwZGF0ZTsKICAgICBib29s
IG1fbWFya2VkQ2FudmFzRGlydHk7Ci0gICAgLy8gRklYTUU6IEkgdGhpbmsgdGhpcyBpcyBicm9r
ZW4gLS0gaXQgZG9lcyBub3QgaW5jcmVtZW50IGFueQotICAgIC8vIHJlZmVyZW5jZSBjb3VudHMs
IHNvIG1heSByZWZlciB0byBkZXN0cm95ZWQgb2JqZWN0cy4KICAgICBIYXNoU2V0PFJlZlB0cjxX
ZWJHTE9iamVjdD4gPiBtX2NhbnZhc09iamVjdHM7CiAKICAgICAvLyBMaXN0IG9mIGJvdW5kIFZC
TydzLiBVc2VkIHRvIG1haW50YWluIGluZm8gYWJvdXQgc2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBh
bmQgc3RvcmVkIHZhbHVlcyBmb3IgRUxFTUVOVF9BUlJBWV9CVUZGRVIKQEAgLTQyMSw2ICs0MjQs
NyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9uZyBtX2ltcGxlbWVudGF0aW9uQ29sb3JSZWFk
VHlwZTsKICAgICBib29sIG1fdW5wYWNrRmxpcFk7CiAgICAgYm9vbCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGE7CisgICAgYm9vbCBtX2NvbnRleHRMb3N0OwogCiAgICAgLy8gSGVscGVycyBmb3Ig
Z2V0UGFyYW1ldGVyIGFuZCBvdGhlcnMKICAgICBXZWJHTEdldEluZm8gZ2V0Qm9vbGVhblBhcmFt
ZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmlkbAppbmRleCBmNzY2NDZkYTRiZmFlNmY5MGFjYzI4NzdiYzRiMDQ0
MmY5NDJiYjNjLi5jNDVlODgwMGI3NTZiMTU3MWRiODIzODljZTRiMTdhMTQzMjZlNDNiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKKysr
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCkBAIC00NjMs
NiArNDYzLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICAvKiBXZWJHTC1zcGVjaWZpYyBlbnVt
cyAqLwogICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVU5QQUNLX0ZMSVBfWV9XRUJHTCAgICAg
ICAgICAgID0gMHg5MjQwOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVU5QQUNLX1BSRU1V
TFRJUExZX0FMUEhBX1dFQkdMID0gMHg5MjQxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
Q09OVEVYVF9MT1NUX1dFQkdMICAgICAgICAgICAgID0gMHg5MjQyOwogCiAgICAgICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBhY3RpdmVUZXh0dXJlKGluIHVuc2lnbmVkIGxv
bmcgdGV4dHVyZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBhdHRhY2hTaGFkZXIoaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0s
IGluIFdlYkdMU2hhZGVyIHNoYWRlcikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CkBAIC01NTEsMTgg
KzU1MiwxOCBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbV0gdm9pZCBnZXRQYXJhbWV0ZXIoKTsKICAgICAgICAgLy8gYW55IGdldFByb2dyYW1QYXJh
bWV0ZXIoaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0sIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpIHJh
aXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21d
IHZvaWQgZ2V0UHJvZ3JhbVBhcmFtZXRlcigpOwotICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0pIHJh
aXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDb252ZXJ0
TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhpbiBXZWJHTFBy
b2dyYW0gcHJvZ3JhbSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIC8vIGFueSBnZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXIoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVk
IGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b21dIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKCk7CiAgICAgICAg
IC8vIGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoaW4gV2ViR0xTaGFkZXIgc2hhZGVyLCBpbiB1bnNp
Z25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIGdldFNoYWRlclBhcmFtZXRlcigpIHJhaXNlcyhET01F
eGNlcHRpb24pOwogCi0gICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIERPTVN0cmluZyAgICBn
ZXRTaGFkZXJJbmZvTG9nKGluIFdlYkdMU2hhZGVyIHNoYWRlcikgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CisgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIENvbnZlcnROdWxsU3RyaW5nVG89TnVs
bF0gRE9NU3RyaW5nICAgIGdldFNoYWRlckluZm9Mb2coaW4gV2ViR0xTaGFkZXIgc2hhZGVyKSBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAgICAgICAvLyBUQkQKICAgICAgICAgLy8gdm9pZCBn
bEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVj
aXNpb250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOwogCi0gICAgICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoaW4gV2ViR0xT
aGFkZXIgc2hhZGVyKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW1N0cmljdFR5cGVD
aGVja2luZywgQ29udmVydE51bGxTdHJpbmdUbz1OdWxsXSBET01TdHJpbmcgICAgZ2V0U2hhZGVy
U291cmNlKGluIFdlYkdMU2hhZGVyIHNoYWRlcikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICAg
ICAgICAgLy8gYW55IGdldFRleFBhcmFtZXRlcihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4g
dW5zaWduZWQgbG9uZyBwbmFtZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCBnZXRUZXhQYXJhbWV0ZXIoKTsKQEAgLTU3OSw2
ICs1ODAsNyBAQCBtb2R1bGUgaHRtbCB7CiAKICAgICAgICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGhpbnQoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxv
bmcgbW9kZSk7CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIGJvb2xlYW4gICAgICBpc0J1
ZmZlcihpbiBXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBib29sZWFuICAgICAgaXNDb250ZXh0TG9zdCgpOwogICAgICAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSBib29sZWFuICAgICAgaXNFbmFibGVkKGluIHVuc2lnbmVkIGxvbmcgY2FwKTsKICAgICAg
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gYm9vbGVhbiAgICAgIGlzRnJhbWVidWZmZXIoaW4gV2Vi
R0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IGJvb2xlYW4gICAgICBpc1Byb2dyYW0oaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0pOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDIwYjRlMmQx
OTc4YmY3ODIwNGFmYTE5NzQzNWVhZWE1NGMyNDMzYjcuLjBiN2QzODhiNWQxMWMxODExZThjZDEz
NWU4M2VkODEyZDcxOTZmYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgKQEAgLTQwMSw2ICs0MDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdl
YkdMLXNwZWNpZmljIGVudW1zCiAgICAgICAgIFVOUEFDS19GTElQX1lfV0VCR0wgPSAweDkyNDAs
CiAgICAgICAgIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCA9IDB4OTI0MSwKKyAgICAg
ICAgQ09OVEVYVF9MT1NUX1dFQkdMID0gMHg5MjQyLAogCiAgICAgICAgIC8vIEdMX0VYVF90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OAogICAgICAgICBCR1JBX0VYVCA9IDB4ODBFMSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72572</attachid>
            <date>2010-11-01 15:15:37 -0700</date>
            <delta_ts>2010-11-02 13:52:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35626-20101101151536.patch</filename>
            <type>text/plain</type>
            <size>90696</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0YzI4NTczYzk3MmQ4ZGQ2NDZlZGViZWYxYzIxMDdlMTA5YTBmOTJmLi5lZDk2ZWQ4
YzBiMGJmMTY3MzE0YTE3ZjA5NWY0ZWZlMzhkNTI4Y2VlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMTEtMDEgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggdHlwbyBpbiB3ZWJn
bC10ZXN0LXV0aWwuanMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNTYyNgorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dl
YmdsLXRlc3QtdXRpbHMuanM6CisgICAgICAgIChXZWJHTFRlc3RVdGlscyk6CisKIDIwMTAtMTAt
MjggIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMgYi9MYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qcwppbmRleCAw
OWU0YmUwYTNlZWYwMmNlN2I3NjQ3MjE1ZDI1Y2JhNzJkZTBmNTJkLi5mM2U1MjBmYWNmZmIzMjZj
OGU5YjlkNDVkM2RiYjEyMTgzMzMyMDExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qcworKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qcwpAQCAtMjg0
LDcgKzI4NCw3IEBAIHZhciBmaWxsVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB0ZXgsIHdpZHRoLCBo
ZWlnaHQsIGNvbG9yLCBvcHRfbGV2ZWwpIHsKICAqLwogdmFyIGNyZWF0ZUNvbG9yZWRUZXh0dXJl
ID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKSB7CiAgIHZhciB0ZXggPSBnbC5j
cmVhdGVUZXh0dXJlKCk7Ci0gIGZpbGxUZXh0dXJlKGdsLCB0ZXh0LCB3aWR0aCwgaGVpZ2h0LCBj
b2xvcik7CisgIGZpbGxUZXh0dXJlKGdsLCB0ZXgsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKTsKICAg
cmV0dXJuIHRleDsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggZDIzMjVkYzY2YjYwNmY0YTg0MDdjNzhiOWQyNjBhOWZhOGFkN2Y3
MS4uYzhjNDcwNGZjZDg1N2I3OWQ0ZGI0NTkzY2U1NTRiMTg3Nzk2NjliZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjIg
QEAKKzIwMTAtMTEtMDEgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgbG9z
dCBhbmQgcmVzdG9yZWQgY29udGV4dCBldmVudHMgZm9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dC4K
KyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaG9va2VkIHVwIHlldCwgYnV0IHRoZSBj
b250ZXh0IG5vdyBhY3RzCisgICAgICAgIGFjY29yZGluZyB0byB0aGUgc3BlYyBhcyBpdCBzaG91
bGQgZHVyaW5nIGEgbG9zdCBjb250ZXh0LiAgVGVzdGVkCisgICAgICAgIG1hbnVhbGx5LCBhcyB0
aGVyZSdzIG5vIHByb2dyYW1tYXRpYyB3YXkgdG8gbG9zZSBhIGNvbnRleHQgeWV0LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU2MjYKKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVyc0NhbGxiYWNrKToKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0V2ZW50TmFtZXMu
aDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEV2ZW50LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTEV2ZW50OjpXZWJHTEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMRXZlbnQ6On5XZWJHTEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRXZlbnQ6Omlu
aXRFdmVudCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xFdmVudC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMRXZlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTEV2ZW50OjpzdGF0dXNNZXNzYWdlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEV2
ZW50LmlkbDogQWRkZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckRlcHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hh
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZWxldGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVwdGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVw
dGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNo
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5h
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVz
aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpmcm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldENvbnRleHRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhB
dHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRM
b3N0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNGcmFtZWJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUHJvZ3JhbSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5lV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVsU3RvcmVpKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cG9seWdvbk9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9y
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2FtcGxlQ292
ZXJhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2hhZGVyU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1Nl
cGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNp
bE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2ls
TWFza1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c3RlbmNpbE9wKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Rl
bmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
Mml2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNm
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGYpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVzZVByb2dyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWJmdkltcGwpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKwogMjAxMC0xMC0y
OCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFkYW0gUm9iZW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IGM3ZGNmMTgyZTY0N2U2Mzg5ODRiN2UxNzhiZjU2ODVhYTVmMzU5
YTMuLmY3NmY0M2NhYzg5ZmYzMDEwYjhlMmY4M2JiNGRmMmRkMzNiNjE1MGMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMTUs
NiArMjE1LDcgQEAKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaWRs
JywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwnLAogICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRsJywKKyAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9XZWJHTEV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMUHJv
Z3JhbS5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlk
bCcsCkBAIC0xODU0LDYgKzE4NTUsOCBAQAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdM
QnVmZmVyLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuY3BwJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVz
LmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMRXZlbnQuY3BwJywKKyAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9XZWJHTEV2ZW50LmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuY3BwJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMR2V0SW5mby5jcHAn
LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2Y2YwMjYz
YTFlZjZhOTBjZjAxOTdmNDFhZTg1OTc2ZmFhNDFmMmVjLi5iZjA3OWFmMjU5NWYwNzU2YjgxMTYw
ZTJkZTY4YjI1MjM1NGMxMGNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMjg2MSw2ICsyODYxLDggQEAKIAkJOTNGMTlCMTUwODI0NUU1OTAwMUU5QUJD
IC8qIENvY29hLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY1QzI4Njk1MDI4NDZEQ0QwMTg2MzVDQSAvKiBDb2NvYS5mcmFtZXdvcmsg
Ki87IH07CiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZhU2NyaXB0Q29yZS5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
ODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9
OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29yZS5keWxpYiBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEMzFBMDU1OEND
NUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OworCQk5M0Y2RjFFRDEyN0Y3MEIx
MDA1NUNCMDYgLyogV2ViR0xFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0Y2RjFFQTEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xFdmVudC5j
cHAgKi87IH07CisJCTkzRjZGMUVFMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTEV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y2RjFFQjEyN0Y3
MEIxMDA1NUNCMDYgLyogV2ViR0xFdmVudC5oICovOyB9OwogCQk5M0Y5MjU0MzBGN0VGNUI4MDA3
RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGOTI1NDEwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRS
YWRpb0J1dHRvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk5M0Y5MjU0NDBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y5MjU0
MjBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgKi87IH07CiAJCTkz
RjlCNjU3MEJBMEYzNUUwMDg1NDA2NCAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjlCNjU0MEJBMEYzNUUw
MDg1NDA2NCAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5tbSAqLzsgfTsKQEAgLTg5MTksNiArODky
MSw5IEBACiAJCTkzRjE5QjE5MDgyNDVFNTkwMDFFOUFCQyAvKiBJbmZvLnBsaXN0ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9IEluZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk5M0YxOUIxQTA4MjQ1RTVBMDAx
RTlBQkMgLyogV2ViQ29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSBXZWJDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKIAkJOTNGMUQzMUEwNTU4Q0M1QzAwODIxQkMwIC8qIGxpYmljdWNvcmUuZHlsaWIgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQu
bWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYmljdWNvcmUuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9s
aWJpY3Vjb3JlLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OworCQk5M0Y2RjFF
QTEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBXZWJHTEV2ZW50LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTEV2ZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNGNkYxRUIxMjdGNzBCMTAwNTVD
QjA2IC8qIFdlYkdMRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
R0xFdmVudC5oOyBwYXRoID0gY2FudmFzL1dlYkdMRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTNGNkYxRUMxMjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdMRXZlbnQuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMRXZlbnQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdM
RXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNTBBMzAwRkUx
MDBGNjFBQjggLyogQ29kZUdlbmVyYXRvci5wbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnBlcmw7
IG5hbWUgPSBDb2RlR2VuZXJhdG9yLnBtOyBwYXRoID0gc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBt
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNjBBMzAwRkVBMDBGNjFBQjgg
LyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9
IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB3cmFwc0xpbmVzID0gMDsgfTsKIAkJOTNGOEIzMDcw
QTMwMEZFQTAwRjYxQUI4IC8qIGdlbmVyYXRlLWJpbmRpbmdzLnBsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucGVybDsgbmFtZSA9ICJnZW5lcmF0ZS1iaW5kaW5ncy5wbCI7IHBhdGggPSAic2NyaXB0
cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MjUzMyw2ICsxMjUzOCw5IEBACiAJCQkJNkU0RTkxQTkxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdM
Q29udGV4dEF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTZFNEU5MUFBMTBGN0ZCMzEwMEEyNzc5QyAv
KiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi8sCiAJCQkJNkU0RTkxQUIxMEY3RkIzMTAwQTI3
NzlDIC8qIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRsICovLAorCQkJCTkzRjZGMUVBMTI3Rjcw
QjEwMDU1Q0IwNiAvKiBXZWJHTEV2ZW50LmNwcCAqLywKKwkJCQk5M0Y2RjFFQjEyN0Y3MEIxMDA1
NUNCMDYgLyogV2ViR0xFdmVudC5oICovLAorCQkJCTkzRjZGMUVDMTI3RjcwQjEwMDU1Q0IwNiAv
KiBXZWJHTEV2ZW50LmlkbCAqLywKIAkJCQk0OUM3QjlBRTEwNDJEMzJFMDAwOUQ0NDcgLyogV2Vi
R0xGcmFtZWJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5QUYxMDQyRDMyRTAwMDlENDQ3IC8qIFdl
YkdMRnJhbWVidWZmZXIuaCAqLywKIAkJCQk0OUM3QjlCMDEwNDJEMzJFMDAwOUQ0NDcgLyogV2Vi
R0xGcmFtZWJ1ZmZlci5pZGwgKi8sCkBAIC0yMTE4NCw2ICsyMTE5Miw3IEBACiAJCQkJMDg3Qjg0
OTYxMjcyQ0VDODAwQTE0NDE3IC8qIFNWR0FuaW1hdGVkQW5nbGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA4Qzg1OUMwMTI3NDU3NTQwMEE1NzI4RCAvKiBTVkdBbmltYXRlZFJlY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc1ODk3OEVEMTI3MDkwRDYwMDc2RDVBOSAvKiBTcGVlY2hJbnB1dFJlc3Vs
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNGNkYxRUUxMjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdM
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjM3NDAsNiArMjM3NDksNyBAQAogCQkJCTdBMUYy
QjUyMTI2QzYxQjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTEzRjAxRjExMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQk3NTg5NzhFQzEyNzA5MEQ2MDA3NkQ1QTkgLyogU3BlZWNoSW5wdXRS
ZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNGNkYxRUQxMjdGNzBCMTAwNTVDQjA2IC8q
IFdlYkdMRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKaW5k
ZXggOTM0NmEwNTQ3Yzg0MWY4ODQ2M2Y3MzZlNjViODI3MTA5ZmY0ZTY0YS4uYjIyNDBlZGMyY2Uw
ODRmOGMzYjY4YmE0MTQ3ZWNiYjk0Zjc4MTc1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcApA
QCAtMjM2LDEwICsyMzYsMTAgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnNDYWxsYmFjayhjb25zdAogICAgIGJvb2wgc3Vj
Y2VlZCA9IGNvbnRleHQtPmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7
CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7Ci0g
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB2ODo6TnVsbCgp
OwogICAgIH0KICAgICBpZiAoIXN1Y2NlZWQpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+
IGFycmF5ID0gdjg6OkFycmF5OjpOZXcoc2hhZGVycy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90
IGlpID0gMDsgaWkgPCBzaGFkZXJzLnNpemUoKTsgKytpaSkKICAgICAgICAgYXJyYXktPlNldCh2
ODo6SW50ZWdlcjo6TmV3KGlpKSwgdG9WOChzaGFkZXJzW2lpXSkpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vRXZlbnROYW1lcy5oIGIvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCmluZGV4IDY0
NDAwMDAxZTE2YWFmYjE1NTk2Yzc1MDUyMzc1ODE0MWYyMmFmZDguLmFlYWQyYmMxZDI4NDZjNWNi
MGZkNjg2ZjY0NjRmZGNkMDc3OTNmNTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0V2ZW50TmFt
ZXMuaAorKysgYi9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKQEAgLTE2OCw3ICsxNjgsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFwKICAgICBtYWNybyh3ZWJraXRmdWxsc2NyZWVuY2hh
bmdlKSBcCiAgICAgXAotICAgIG1hY3JvKHdlYmtpdHNwZWVjaGNoYW5nZSkKKyAgICBtYWNybyh3
ZWJraXRzcGVlY2hjaGFuZ2UpIFwKKyAgICBcCisgICAgbWFjcm8od2ViZ2xjb250ZXh0bG9zdCkg
XAorICAgIG1hY3JvKHdlYmdsY29udGV4dHJlc3RvcmVkKSBcCisgICAgbWFjcm8od2ViZ2xjb250
ZXh0Y3JlYXRpb25lcnJvcikgXAogICAgIFwKIC8vIGVuZCBvZiBET01fRVZFTlRfTkFNRVNfRk9S
X0VBQ0gKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV2ZW50LmNwcCBi
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFdmVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmVlY2E0Mjk5
NTZlODVjYWU0ZDIwOWQ5NmYxN2I1YzRjM2I5ZWI0OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xFdmVudC5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJHTEV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworV2ViR0xFdmVudDo6V2ViR0xFdmVudCgpCit7Cit9CisKK1dlYkdMRXZlbnQ6OldlYkdMRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxh
YmxlLCBjb25zdCBTdHJpbmcmIHN0YXR1c01lc3NhZ2UpCisgICAgOiBFdmVudCh0eXBlLCBjYW5C
dWJibGUsIGNhbmNlbGFibGUpCisgICAgLCBtX3N0YXR1c01lc3NhZ2Uoc3RhdHVzTWVzc2FnZSkK
K3sKK30KKworV2ViR0xFdmVudDo6fldlYkdMRXZlbnQoKQoreworfQorCit2b2lkIFdlYkdMRXZl
bnQ6OmluaXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBi
b29sIGNhbmNlbGFibGUsIGNvbnN0IFN0cmluZyYgc3RhdHVzTWVzc2FnZSkKK3sKKyAgICBpZiAo
ZGlzcGF0Y2hlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBFdmVudDo6aW5pdEV2ZW50KHR5
cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSk7CisgICAgbV9zdGF0dXNNZXNzYWdlID0gc3RhdHVz
TWVzc2FnZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEV2ZW50LmggYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXZl
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iZTVkZGUyMjYwOGNiNmYyZjRhOTA2NmM2MDE2MmZjNjkyMTNmZDkz
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV2ZW50LmgKQEAg
LTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViR0xFdmVudF9oCisjZGVmaW5lIFdlYkdMRXZlbnRfaAor
CisjaW5jbHVkZSAiRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJH
TEV2ZW50IDogcHVibGljIEV2ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJHTEV2ZW50PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
ZWJHTEV2ZW50KTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xFdmVudD4gY3Jl
YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2Vs
YWJsZSwgY29uc3QgU3RyaW5nJiBzdGF0dXNNZXNzYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXZWJHTEV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgc3Rh
dHVzTWVzc2FnZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5XZWJHTEV2ZW50KCk7CisKKyAgICB2
b2lkIGluaXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBi
b29sIGNhbmNlbGFibGUsIGNvbnN0IFN0cmluZyYgc3RhdHVzTWVzc2FnZSk7CisKKyAgICBjb25z
dCBTdHJpbmcmIHN0YXR1c01lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1c01lc3NhZ2U7
IH0KKworcHJvdGVjdGVkOgorICAgIFdlYkdMRXZlbnQoKTsKKyAgICBXZWJHTEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29u
c3QgU3RyaW5nJiBzdGF0dXNNZXNzYWdlKTsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9zdGF0
dXNNZXNzYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2Vi
R0xFdmVudF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXZlbnQuaWRs
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV2ZW50LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDg1NGY0
NGY5NDVhYmI5NDFlZDlkZGFlMjk3MWQ3YmQ4ZGNkOWJmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEV2ZW50LmlkbApAQCAtMCwwICsxLDMwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKK21vZHVs
ZSBodG1sIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD0zRF9DQU5WQVMs
CisgICAgXSBXZWJHTEV2ZW50IDogRXZlbnQgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHN0YXR1c01lc3NhZ2U7CisgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgaW5pdEV2ZW50KGluIERPTVN0cmluZyBldmVudFR5cGVBcmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gY2FuQnViYmxlQXJnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbmNl
bGFibGVBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IERPTVN0cmluZyBzdGF0dXNNZXNzYWdlQXJnKTsKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGE0NWFhMWE0MWRkNmE2MGI1
YWY4ZWUzY2U1NGYzYmQ5YjQ5ODk4YjIuLjRhNDdmNTI4MWNkODE1ZWQyZjk1ZGRkYzk3ODk1ZDUx
MjA3YjM5ODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKICNp
bmNsdWRlICJXZWJHTEJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMu
aCIKKyNpbmNsdWRlICJXZWJHTEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5o
IgogI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVmZmVy
LmgiCkBAIC05OSwxOSArMTAwLDMyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVuCiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCog
cGFzc2VkQ2FudmFzLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogICAg
IDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCiAgICAgLCBtX2NvbnRleHQo
Y29udGV4dCkKLSAgICAsIG1fbmVlZHNVcGRhdGUodHJ1ZSkKLSAgICAsIG1fbWFya2VkQ2FudmFz
RGlydHkoZmFsc2UpCi0gICAgLCBtX2FjdGl2ZVRleHR1cmVVbml0KDApCiAgICAgLCBtX3ZpZGVv
Q2FjaGUoNCkKLSAgICAsIG1fcGFja0FsaWdubWVudCg0KQotICAgICwgbV91bnBhY2tBbGlnbm1l
bnQoNCkKLSAgICAsIG1fdW5wYWNrRmxpcFkoZmFsc2UpCi0gICAgLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEoZmFsc2UpCisgICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQogewogICAgIEFTU0VS
VChtX2NvbnRleHQpOworICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCit7CisgICAgbV9uZWVk
c1VwZGF0ZSA9IHRydWU7CisgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOworICAgIG1f
YWN0aXZlVGV4dHVyZVVuaXQgPSAwOworICAgIG1fcGFja0FsaWdubWVudCA9IDQ7CisgICAgbV91
bnBhY2tBbGlnbm1lbnQgPSA0OworICAgIG1fdW5wYWNrRmxpcFkgPSBmYWxzZTsKKyAgICBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKKyAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAw
OworICAgIG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIgPSAwOworICAgIG1fY3VycmVudFByb2dy
YW0gPSAwOworICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKKyAgICBtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmcgPSAwOworICAgIG1fdmVydGV4QXR0cmliU3RhdGUuY2xlYXIoKTsKIAogICAgIGlu
dCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKICAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fdGV4dHVyZVVuaXRzLmNs
ZWFyKCk7CiAgICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMpOwogCiAgICAgaW50IG51bVZlcnRleEF0dHJpYnMgPSAwOwpAQCAtMTk5LDYgKzIxMyw4
IEBAIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpemVJbkJ5dGVzKGludCB0eXBlKQogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0
dXJlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAodGV4dHVyZSAtIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCA+PSBtX3RleHR1cmVVbml0cy5zaXplKCkpIHsKICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjExLDcgKzIyNyw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSwg
RXhjZXB0aW9uQ29kZSYKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIo
V2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9i
amVjdChwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghcHJvZ3Jh
bS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtMjI1LDcg
KzI0MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIoV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQg
bG9uZyBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFt
KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dy
YW0pKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24o
b2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKQEAgLTIzNCw2ICsyNTAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWdu
ZWQgbAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKQEAgLTI2Miw2ICsyODAsOCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwg
V2ViR0xCdWZmZXIqIGJ1ZmZlcgogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFt
ZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+
Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47
CkBAIC0yODAsNiArMzAwLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFt
ZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmYKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBX
ZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJl
dHVybjsKICAgICBpZiAocmVuZGVyQnVmZmVyICYmIHJlbmRlckJ1ZmZlci0+Y29udGV4dCgpICE9
IHRoaXMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CkBAIC0yOTcsNiAr
MzE5LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIodW5z
aWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMUmVuZGVyYnUKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0
dXJlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAodGV4dHVyZSAmJiB0
ZXh0dXJlLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
IHJldHVybjsKQEAgLTMzMCwxMyArMzU0LDE1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0CiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJs
ZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkKIHsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5ibGVuZENvbG9yKHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvbih1bnNpZ25l
ZCBsb25nIG1vZGUpCiB7Ci0gICAgaWYgKCF2YWxpZGF0ZUJsZW5kRXF1YXRpb24obW9kZSkpCisg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGUpKQog
ICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0zNDQsNyArMzcwLDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9uZyBtb2Rl
KQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKHVu
c2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpCiB7Ci0gICAgaWYg
KCF2YWxpZGF0ZUJsZW5kRXF1YXRpb24obW9kZVJHQikgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlv
bihtb2RlQWxwaGEpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRF
cXVhdGlvbihtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGVBbHBoYSkpCiAg
ICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2Rl
UkdCLCBtb2RlQWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBA
IC0zNTMsMTIgKzM3OSwxNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVh
dGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZQogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2ZhY3RvciwgdW5zaWdu
ZWQgbG9uZyBkZmFjdG9yKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJl
dHVybjsKICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfSAgICAgICAKIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1
bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9u
ZyBkc3RBbHBoYSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47
CiAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxw
aGEsIGRzdEFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpA
QCAtMzY2LDYgKzM5Niw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmNT
ZXBhcmF0ZSh1bnNpZ25lZCBsb25nIHNyY1JHQiwgdW5zaWduZWQgbG9uCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUs
IHVuc2lnbmVkIGxvbmcgdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdl
dCwgdXNhZ2UpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC0zODMsNiAr
NDE1LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQg
bG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCB1
bnNpZ25lZCBsb25nIHVzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBX
ZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQs
IHVzYWdlKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpAQCAtNDAwLDYgKzQz
NCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEs
IHVuc2lnbmVkIGxvbmcgdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdl
dCwgdXNhZ2UpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC00MTcsNiAr
NDUzLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQg
bG9uZyB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogZGEKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgQXJy
YXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFdlYkdM
QnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdldCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAg
cmV0dXJuOwpAQCAtNDM0LDYgKzQ3Miw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
dWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgQXJyCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAg
ICAgICByZXR1cm47CiAgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0
YVBhcmFtZXRlcnModGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC00NTAsNiArNDkwLDggQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQs
IGxvbmcgb2Zmc2V0LCBBcnIKIAogdW5zaWduZWQgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQpCiB7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUikgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1cm4gMDsKQEAgLTQ2
Miw2ICs1MDQsOCBAQCB1bnNpZ25lZCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldAogCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y2xlYXIodW5zaWduZWQgbG9uZyBtYXNrKQogeworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVS
X0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC00NzIsNiArNTE2LDggQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJsZSBnLCBkb3VibGUgYiwg
ZG91YmxlIGEpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwog
ICAgIGlmIChpc25hbihyKSkKICAgICAgICAgciA9IDA7CiAgICAgaWYgKGlzbmFuKGcpKQpAQCAt
NDg2LDE4ICs1MzIsMjQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3Io
ZG91YmxlIHIsIGRvdWJsZSBnLCBkb3VibGUgYiwgZG91YmxlIGEpCiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCkKIHsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGRl
cHRoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKGxvbmcgcykKIHsKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5j
aWwocyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9v
bCBibHVlLCBib29sIGFscGhhKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybjsKICAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTUwNSw3ICs1
NTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNrKGJvb2wgcmVkLCBi
b29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3Qo
c2hhZGVyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIo
b2JqZWN0T3JaZXJvKHNoYWRlcikpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CkBAIC01MTMsNiArNTY1LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBp
bGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMKIAogdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcg
eSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVy
KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAo
IXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnModGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKSkKICAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIHRydWUpOwpAQCAtNTQwLDYgKzU5NCw4
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBs
b25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojpjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9u
ZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQor
ICAgICAgICByZXR1cm47CiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVC
aW5kaW5nKHRhcmdldCwgdHJ1ZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKQEAg
LTU1Nyw2ICs2MTMsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1Yklt
YWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsCiAKIFBhc3NSZWZQdHI8V2Vi
R0xCdWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKIHsKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xC
dWZmZXI+IG8gPSBXZWJHTEJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwogICAgIGFkZE9iamVjdChvLmdl
dCgpKTsKICAgICByZXR1cm4gbzsKQEAgLTU2NCw2ICs2MjIsOCBAQCBQYXNzUmVmUHRyPFdlYkdM
QnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCiAgICAgICAgIAog
UGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUZyYW1lYnVmZmVyKCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1
cm4gMDsKICAgICBSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gbyA9IFdlYkdMRnJhbWVidWZmZXI6
OmNyZWF0ZSh0aGlzKTsKICAgICBhZGRPYmplY3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87CkBA
IC01NzEsNiArNjMxLDggQEAgUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIAogUGFzc1JlZlB0cjxXZWJHTFRleHR1
cmU+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCiB7CisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFdlYkdMVGV4dHVy
ZT4gbyA9IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKHRoaXMpOwogICAgIGFkZE9iamVjdChvLmdldCgp
KTsKICAgICByZXR1cm4gbzsKQEAgLTU3OCw2ICs2NDAsOCBAQCBQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKIAogUGFzc1JlZlB0
cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCiB7
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRy
PFdlYkdMUHJvZ3JhbT4gbyA9IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOwogICAgIGFkZE9i
amVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsKQEAgLTU4NSw2ICs2NDksOCBAQCBQYXNzUmVm
UHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkK
IAogUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVSZW5kZXJidWZmZXIoKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdlYkdMUmVuZGVy
YnVmZmVyOjpjcmVhdGUodGhpcyk7CiAgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJldHVy
biBvOwpAQCAtNTkzLDYgKzY1OSw4IEBAIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIFBhc3NSZWZQdHI8V2Vi
R0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxv
bmcgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gMDsKICAgICBpZiAodHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKICAgICAgICAgcmV0dXJu
IDA7CkBAIC02MDUsMTMgKzY3MywxNSBAQCBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUsCiAKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCiB7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+
Y3VsbEZhY2UobW9kZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciog
YnVmZmVyKQogewotICAgIGlmICghYnVmZmVyKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwg
IWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGJ1ZmZlci0+ZGVsZXRlT2JqZWN0
KCk7CkBAIC02MzMsNyArNzAzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUJ1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCiB7Ci0g
ICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFmcmFtZWJ1
ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX2ZyYW1lYnVm
ZmVyQmluZGluZykgewogICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7CkBAIC02NDUs
NyArNzE1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVy
KFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCiB7Ci0gICAgaWYgKCFw
cm9ncmFtKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXByb2dyYW0pCiAgICAgICAgIHJl
dHVybjsKICAgICBpZiAocHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04pOwpAQCAtNjU4LDcgKzcyOCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKIAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVm
ZmVyKQogewotICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXJlbmRlcmJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChyZW5kZXJidWZmZXIg
PT0gbV9yZW5kZXJidWZmZXJCaW5kaW5nKQogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcg
PSAwOwpAQCAtNjY5LDcgKzczOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxl
dGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKIAogdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQog
ewotICAgIGlmICghc2hhZGVyKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXNoYWRlcikK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHNoYWRlci0+ZGVsZXRlT2JqZWN0KCk7CkBAIC02
NzcsNyArNzQ3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVNoYWRlcihX
ZWJHTFNoYWRlciogc2hhZGVyKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRl
VGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCiB7Ci0gICAgaWYgKCF0ZXh0dXJlKQorICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXRleHR1cmUpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICB0ZXh0dXJlLT5kZWxldGVPYmplY3QoKTsKQEAgLTY4NywxOCArNzU3LDI0IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVy
ZSkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyh1bnNpZ25lZCBsb25n
IGZ1bmMpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IG1fY29udGV4dC0+ZGVwdGhGdW5jKGZ1bmMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aE1hc2soYm9v
bCBmbGFnKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAg
ICBtX2NvbnRleHQtPmRlcHRoTWFzayhmbGFnKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhSYW5nZShk
b3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisg
ICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC03MDYsNyArNzgyLDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBk
b3VibGUgekZhcikKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVj
dChwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghcHJvZ3JhbS0+
ZGV0YWNoU2hhZGVyKHNoYWRlcikpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtNzIwLDcgKzc5
Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQogewotICAgIGlmICghdmFsaWRhdGVDYXBh
YmlsaXR5KGNhcCkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmls
aXR5KGNhcCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtNzI5LDYgKzgwNSw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNp
Z25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAo
aW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICBy
ZXR1cm47CkBAIC05MjUsNyArMTAwMyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VuCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKIAotICAgIGlmICghdmFsaWRhdGVEcmF3TW9kZShtb2RlKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKG1vZGUpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoZmlyc3QgPCAwIHx8IGNvdW50IDwgMCkgewpAQCAtOTY2
LDcgKzEwNDQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKHVu
c2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBjb3VudCwgdW5zaWduZQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7CiAKLSAgICBpZiAoIXZhbGlkYXRlRHJhd01vZGUobW9kZSkpCisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShtb2RlKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xMDIzLDcgKzExMDEsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBjb3Vu
dCwgdW5zaWduZQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKHVuc2lnbmVk
IGxvbmcgY2FwKQogewotICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CkBAIC0xMDMyLDYgKzExMTAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0
dHJpYnMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwNDgsNiArMTEy
OCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpmaW5pc2goKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVy
bjsKICAgICBtX2NvbnRleHQtPmZpbmlzaCgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bCh0cnVlKTsKIH0KQEAgLTEwNTUsNiArMTEzNyw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpmaW5pc2goKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2goKQogewor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQt
PmZsdXNoKCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQpAQCAtMTA2
Miw3ICsxMTQ2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZsdXNoKCkKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRl
cmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlRnJhbWVidWZm
ZXJGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGF0dGFj
aG1lbnQpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CkBAIC0xMTE0
LDcgKzExOTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbgogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1
cmUqIHRleHR1cmUsIGxvbmcgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMo
dGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0
ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKICAgICAgICAg
cmV0dXJuOwogICAgIGlmIChsZXZlbCkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKQEAgLTExMzgsMTIgKzEy
MjIsMTYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5mcm9udEZhY2UobW9kZSk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdlbmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQogewor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBXZWJHTFRleHR1
cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0LCBmYWxzZSk7CiAgICAgaWYg
KCF0ZXgpCiAgICAgICAgIHJldHVybjsKQEAgLTExNzIsOSArMTI2MCw5IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkKIFBh
c3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2
ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgQWN0aXZlSW5mbyBp
bmZvOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICBy
ZXR1cm4gMDsKKyAgICBBY3RpdmVJbmZvIGluZm87CiAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFj
dGl2ZUF0dHJpYihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwg
aW5mby50eXBlLCBpbmZvLnNpemUpOwpAQCAtMTE4Myw5ICsxMjcxLDkgQEAgUGFzc1JlZlB0cjxX
ZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKFdl
YkdMUHJvZ3JhbSoKIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBs
b25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3Jh
bSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9n
cmFtKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgQWN0aXZlSW5mbyBpbmZvOwogICAgIGlmICgh
bV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgs
IGluZm8pKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkK
QEAgLTExOTgsNyArMTI4Niw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRh
Y2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBWZWN0b3I8V2ViCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKICAgICBzaGFkZXJPYmplY3RzLmNsZWFyKCk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
bnQgbnVtU2hhZGVycyA9IDA7CiAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QVRUQUNIRURfU0hBREVSUywgJm51bVNo
YWRlcnMpOwpAQCAtMTIyMywxMiArMTMxMSwxNiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVjdG9yPFdlYgog
CiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmli
TG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKIH0KIAogV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIgJiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZ
X0JVRkZFUikgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CkBAIC0xMjQ5LDYgKzEzNDEsOCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRCdWZmZXJQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVucwogCiBQYXNzUmVm
UHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJl
dHVybiAwOwogICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzIG9iamVjdCB0bwogICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRh
dGluZyBhbnkgY2FjaGVkIHZlcnNpb24uCiAgICAgcmV0dXJuIFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXM6OmNyZWF0ZShtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOwpAQCAtMTI2Miw3
ICsxMzU2LDcgQEAgdW5zaWduZWQgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEVycm9y
KCkKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRh
Y2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0
ZXJzKHRhcmdldCwgYXR0YWNobWVudCkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgYXR0YWNobWVudCkpCiAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToK
QEAgLTEzMTAsNiArMTQwNCw4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih1bnNpZ25lZCBsCiBXZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyBwbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgV2Vi
R0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1RFWFRVUkU6CkBAIC0xNTAxLDcgKzE1OTcs
NyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIodW5z
aWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQwogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKIAogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxz
ZSk7CkBAIC0xNTMwLDggKzE2MjYsOCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdQogU3RyaW5n
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuICIiOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywg
ZmFsc2UpOwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVjdE9y
WmVybyhwcm9ncmFtKSk7CiB9CkBAIC0xNTM5LDYgKzE2MzUsOCBAQCBTdHJpbmcgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4
Y2VwdGlvbgogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBpZiAodGFy
Z2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsK
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwpAQCAtMTU3Miw3ICsxNjcwLDcgQEAgV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
KHVuc2lnbmVkIGxvbmcgdGFyZ2UKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRlciogc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
ICghdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgaW50IHZh
bHVlID0gMDsKQEAgLTE1OTcsOCArMTY5NSw4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRlciogc2hhZGVyLCB1bnNpCiBT
dHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVy
KiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCi0gICAgICAgIHJldHVybiAiIjsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywg
ZmFsc2UpOwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3Ja
ZXJvKHNoYWRlcikpOwogfQpAQCAtMTYwNiw4ICsxNzA0LDggQEAgU3RyaW5nIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRp
b25Db2QKIFN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclNvdXJjZShXZWJH
TFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQotICAgICAgICByZXR1
cm4gIiI7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChz
aGFkZXIpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVy
KHRoaXMsIGZhbHNlKTsKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRTaGFkZXJTb3VyY2Uob2Jq
ZWN0T3JaZXJvKHNoYWRlcikpOwogfQpAQCAtMTYxNSw2ICsxNzEzLDggQEAgU3RyaW5nIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4
Y2VwdGlvbkNvZGUKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBh
cmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgV2ViR0xUZXh0dXJl
KiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgZmFsc2UpOwogICAgIGlmICgh
dGV4KQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CkBAIC0xNjM2LDcgKzE3MzYsNyBA
QCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbgogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiB1bmlmb3JtTG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkp
CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBpZiAoIXVuaWZvcm1Mb2NhdGlv
bikgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFKTsKQEAgLTE3ODAsNyArMTg4MCw3IEBAIFdlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBj
b25zdCBXZWJHCiBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0
IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKICAgICBsb25nIHVu
aWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgbmFtZSk7CkBAIC0xNzkyLDYgKzE4OTIsOCBAQCBQYXNzUmVmUHRyPFdlYkdM
VW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlv
bihXZWJHTAogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0
cmliKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jl
cih0aGlzLCBmYWxzZSk7CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKQEAgLTE4MzksNiArMTk0MSw4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNp
Z25lCiAKIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQo
dW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gMDsKICAgICBsb25nIHJlc3VsdCA9IG1fY29u
dGV4dC0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4LCBwbmFtZSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTg0Niw2ICsx
OTUwLDggQEAgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNl
dCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKQogewor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAodGFyZ2V0
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBfSElOVCkgewogICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0pOwogICAgICAgICByZXR1cm47CkBAIC0xODU2LDIyICsxOTYyLDI3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IG1vZGUpCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0J1ZmZlcihXZWJHTEJ1ZmZl
ciogYnVmZmVyKQogewotICAgIGlmICghYnVmZmVyKQorICAgIGlmICghYnVmZmVyIHx8IGlzQ29u
dGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29udGV4
dC0+aXNCdWZmZXIoYnVmZmVyLT5vYmplY3QoKSk7CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppc0NvbnRleHRMb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0TG9z
dDsKK30KKwogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZCh1bnNpZ25lZCBs
b25nIGNhcCkKIHsKLSAgICBpZiAoIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQorICAgIGlmICgh
dmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkgfHwgaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7CiB9CiAKIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIq
IGZyYW1lYnVmZmVyKQogewotICAgIGlmICghZnJhbWVidWZmZXIpCisgICAgaWYgKCFmcmFtZWJ1
ZmZlciB8fCBpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiBtX2NvbnRleHQtPmlzRnJhbWVidWZmZXIoZnJhbWVidWZmZXItPm9iamVjdCgpKTsKQEAg
LTE4NzksNyArMTk5MCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0ZyYW1lYnVm
ZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQogCiBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBpZiAoIXBy
b2dyYW0pCisgICAgaWYgKCFwcm9ncmFtIHx8IGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9i
amVjdCgpKTsKQEAgLTE4ODcsNyArMTk5OCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppc1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogCiBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikK
IHsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlciB8fCBpc0Nv
bnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBtX2NvbnRl
eHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOwpAQCAtMTg5NSw3ICsy
MDA2LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdlYkdM
UmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppc1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQogewotICAgIGlmICghc2hhZGVyKQorICAg
IGlmICghc2hhZGVyIHx8IGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNTaGFkZXIoc2hhZGVyLT5vYmplY3QoKSk7CkBAIC0x
OTAzLDcgKzIwMTQsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIoV2Vi
R0xTaGFkZXIqIHNoYWRlcikKIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVy
ZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCiB7Ci0gICAgaWYgKCF0ZXh0dXJlKQorICAgIGlmICgh
dGV4dHVyZSB8fCBpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHJldHVybiBtX2NvbnRleHQtPmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7CkBAIC0xOTEx
LDYgKzIwMjIsOCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKFdlYkdM
VGV4dHVyZSogdGV4dHVyZSkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmVXaWR0
aChkb3VibGUgd2lkdGgpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIG1fY29udGV4dC0+bGluZVdpZHRoKChmbG9hdCkgd2lkdGgpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0xOTE4LDcgKzIwMzEsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKGRvdWJsZSB3aWR0aCkKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWlz
R0xFUzJDb21wbGlhbnQoKSkgewogICAgICAgICBpZiAoIXByb2dyYW0tPmdldEF0dGFjaGVkU2hh
ZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKSB8fCAhcHJvZ3JhbS0+Z2V0QXR0
YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikpIHsKQEAgLTE5
MzgsNiArMjA1MSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjCiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFt
KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBzd2l0
Y2ggKHBuYW1lKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9X
RUJHTDoKICAgICAgICAgbV91bnBhY2tGbGlwWSA9IHBhcmFtOwpAQCAtMTk2NCwxMiArMjA3OSwx
NiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9u
ZyBwbmFtZSwgbG9uZyBwYXJhbSkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBvbHln
b25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKQogeworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnBvbHlnb25PZmZzZXQo
KGZsb2F0KSBmYWN0b3IsIChmbG9hdCkgdW5pdHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxz
KGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBm
b3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVy
bjsKICAgICBpZiAoIWNhbnZhcygpLT5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIGVjID0gU0VD
VVJJVFlfRVJSOwogICAgICAgICByZXR1cm47CkBAIC0yMDM3LDEyICsyMTU2LDE2IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdp
ZHRoLCBsb25nIGhlaWdodCwKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbGVhc2VT
aGFkZXJDb21waWxlcigpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIG1fY29udGV4dC0+cmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBz
d2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQ09NUE9ORU5UMTY6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6CkBAIC0y
MDY1LDEyICsyMTg4LDE2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZm
ZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsCiAKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVDb3ZlcmFnZShkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0
KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2Nv
bnRleHQtPnNhbXBsZUNvdmVyYWdlKChmbG9hdCkgdmFsdWUsIGludmVydCk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnNjaXNzb3IobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVy
bjsKICAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTIwNzgsNyArMjIwNSw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVX
ZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+c2hh
ZGVyU291cmNlKG9iamVjdE9yWmVybyhzaGFkZXIpLCBzdHJpbmcpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0yMDg2LDM2ICsyMjEzLDQ4IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3Qg
U3RyaW5nJiBzdHJpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuYyh1
bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCiB7CisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+c3Rl
bmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBh
cmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVu
c2lnbmVkIGxvbmcgbWFzaykKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJl
ZiwgbWFzayk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykK
IHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250
ZXh0LT5zdGVuY2lsTWFzayhtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0
ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFz
a1NlcGFyYXRlKGZhY2UsIG1hc2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AodW5zaWduZWQg
bG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQogewor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQt
PnN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3BT
ZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQg
bG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5zdGVuY2lsT3BTZXBhcmF0ZShm
YWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CkBAIC0yMTY3LDcgKzIzMDYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBBcnJheUJ1ZmZl
clZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCF2YWxpZGF0ZVRl
eEZ1bmNEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgcmV0dXJuOwogICAgIHZvaWQqIGRhdGEgPSBw
aXhlbHMgPyBwaXhlbHMtPmJhc2VBZGRyZXNzKCkgOiAwOwogICAgIFZlY3Rvcjx1aW50OF90PiB0
ZW1wRGF0YTsKQEAgLTIxOTQsNiArMjMzMyw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVu
c2lnbmVkIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VE
YXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIGRhdGEpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwpAQCAtMjIxMSw2ICsyMzUyLDggQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNh
Y2hlZEltYWdlKCkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKQEAgLTIyMjQs
NiArMjM2Nyw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxD
YW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCFjYW52
YXMgfHwgIWNhbnZhcy0+YnVmZmVyKCkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTIyNTYsNiArMjQwMSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVk
IHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbyk7CiAgICAgaWYg
KCF2aWRlbykKICAgICAgICAgcmV0dXJuOwpAQCAtMjI2NCw2ICsyNDExLDggQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBs
ZXZlbCwgdW5zaWduZWQKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRl
cih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQgcGFyYW1m
LCBpbnQgcGFyYW1pLCBib29sIGlzRmxvYXQpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJl
QmluZGluZyh0YXJnZXQsIGZhbHNlKTsKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjMwOSw2ICsyNDU4LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkRCYXNlKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHUKIHsKICAgICAvLyBG
SVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2YWxp
ZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZvcm1hdCwgdHlwZSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIXZhbGlkYXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0LCB0cnVlKSkKQEAgLTIzMjIs
NiArMjQ3Myw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1w
bCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2UqIGltYWdlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7CiAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZv
cm1hdCwgdHlwZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CiAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUpOwpAQCAtMjMzNSw3ICsyNDg4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWcKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0RhdGEod2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpKQogICAgICAgICByZXR1cm47CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscyA/IHBpeGVscy0+
YmFzZUFkZHJlc3MoKSA6IDA7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOwpAQCAtMjM2
MSw2ICsyNTE0LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWcKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwg
SW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7CiAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBm
b3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0
YSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSk7CkBAIC0yMzc0LDYgKzI1MjksOCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxl
dmVsLCB1bnNpZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybjsKICAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+Y2FjaGVkSW1hZ2Uo
KSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4Nyw2ICsyNTQ0LDgg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTENhbnZhc0Vs
ZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOworICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoIWNhbnZhcyB8fCAh
Y2FudmFzLT5idWZmZXIoKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MjQwMCw2ICsyNTU5LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdl
MkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWcKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlw
ZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVj
ID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgUmVm
UHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvKTsKICAgICBpZiAoIXZp
ZGVvKQogICAgICAgICByZXR1cm47CkBAIC0yNDA5LDcgKzI1NzAsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxl
dmVsLCB1bnNpZwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtMjQyNCw3ICsy
NTg1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2EKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMSkpCisg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2Nh
dGlvbiwgdiwgMSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSk7CkBAIC0yNDM0
LDcgKzI1OTUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsbwogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2
LCBzaXplLCAxKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplKTsKQEAg
LTI0NDQsNyArMjYwNSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgaW50IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFsb2NhdGlv
bikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgewpAQCAtMjQ1OSw3ICsyNjIwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IGludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhsb2NhdGlvbiwgdiwgMSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0
YSgpLCB2LT5sZW5ndGgoKSk7CkBAIC0yNDY5LDcgKzI2MzAsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdiwgc2l6ZSk7CkBAIC0yNDc5LDcgKzI2NDAsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAt
MjQ5NCw3ICsyNjU1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2EKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwg
diwgMikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycyhsb2NhdGlvbiwgdiwgMikpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+
dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAv
IDIpOwpAQCAtMjUwNCw3ICsyNjY1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG8KIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cyhsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
diwgc2l6ZSAvIDIpOwpAQCAtMjUxNCw3ICsyNjc1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBm
bG8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxv
Y2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtMjUyOSw3ICsyNjkw
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMikpCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwg
diwgMikpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwpAQCAtMjUzOSw3
ICsyNzAwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
aW50KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNp
emUsIDIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDIpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2Nv
bnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAyKTsKQEAg
LTI1NDksNyArMjcxMCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50CiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIWxvY2F0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNTY0LDcgKzI3MjUsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2
LCAzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CkBAIC0yNTc0LDcg
KzI3MzUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsbwogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBm
bG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBz
aXplLCAzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9j
b250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMyk7CkBA
IC0yNTg0LDcgKzI3NDUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsbwogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5w
cm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtMjU5OSw3ICsyNzYwLDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0z
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMykpCisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMykpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwpAQCAtMjYwOSw3ICsyNzcwLDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBp
bnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDMpKQor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9j
YXRpb24sIHYsIHNpemUsIDMpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVu
aWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAzKTsKQEAgLTI2MTksNyAr
Mjc4MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIWxvY2F0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNjM0LDcgKzI3OTUsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCA0KSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2
LCA0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CkBAIC0yNjQ0LDcg
KzI4MDUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsbwogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBm
bG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBz
aXplLCA0KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9j
b250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gNCk7CkBA
IC0yNjU0LDcgKzI4MTUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsbwogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3LCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhbG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTI2NjksNyArMjgzMCw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJh
eSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDQpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYs
IDQpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKQEAgLTI2NzksNyAr
Mjg0MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGlu
dCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXpl
LCA0KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250
ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gNCk7CkBAIC0y
Njg5LDcgKzI4NTAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludAogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3Jt
TWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYsIDQpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpA
QCAtMjY5OCw3ICsyODU5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1N
YXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW8KIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRl
VW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA0KSkKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJh
bnNwb3NlLCB2LCBzaXplIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKQEAgLTI3MDcsNyArMjg2OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDkpKQorICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
bG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgOSkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CkBAIC0yNzE2LDcgKzI4NzcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpbwogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHYsIGludCBzaXpl
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICgh
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBz
aXplLCA5KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyA5KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwpAQCAtMjcyNSw3ICsyODg2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW8K
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSog
diwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
IXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwg
MTYpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgMTYpKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFu
c3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAxNik7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKQEAgLTI3MzQsNyArMjg5NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCog
diwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFu
c3Bvc2UsIHYsIHNpemUsIDE2KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2
KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXplIC8gMTYpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0yNzQzLDYgKzI5MDQsOCBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVzZVByb2dyYW0oV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBp
ZiAocHJvZ3JhbSAmJiBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgIHJldHVybjsKQEAgLTI3NjYsNyArMjkyOSw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVy
byhwcm9ncmFtKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTI4
MzUsNiArMjk5OCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0
ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYsIGludCBzCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZGV4LCBsb25n
IHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLCBsb25nIHN0cmlkZSwg
bG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbmRl
eCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTI4NzksNiArMzA0NCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGxvbmcgc2l6ZSwKIAogdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGlzbmFuKHgpKQogICAgICAgICB4ID0gMDsK
ICAgICBpZiAoaXNuYW4oeSkpCkBAIC0yODkxLDYgKzMwNTgsNDQgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ24KICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHQoKQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dExvc3QgPSB0cnVlOwor
CisgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworCisgICAgLy8gVGhlcmUgaXMgbm8g
ZGlyZWN0IHdheSB0byBjbGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0aW9uIGFuZAor
ICAgIC8vIGxvb3BpbmcgdW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0IGNh
dXNlIGFuIGluZmluaXRlIGxvb3AgaWYKKyAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQgaW1w
bGVtZW50YXRpb24gaGFkIGEgYnVnLiAgU28sIGxvb3AgYSByZWFzb25hYmx5CisgICAgLy8gbGFy
Z2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFueSBleGlzdGluZyBlcnJvcnMuCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRF
cnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpDT05URVhUX0xPU1RfV0VCR0wpOworCisgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQo
V2ViR0xFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZh
bHNlLCB0cnVlLCAiIikpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9y
ZUNvbnRleHQoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBUaGUgcmVuZGVyaW5nIGNvbnRleHQgaXMgbm90IHJlc3RvcmVkIGlmIHRoZXJl
IGlzIG5vIGhhbmRsZXIgZm9yCisgICAgLy8gdGhlIGNvbnRleHQgcmVzdG9yZWQgZXZlbnQuCisg
ICAgaWYgKCFjYW52YXMoKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmdsY29u
dGV4dHJlc3RvcmVkRXZlbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbml0aWFsaXplTmV3
Q29udGV4dCgpOworCisgICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOworICAgIGNhbnZhcygpLT5k
aXNwYXRjaEV2ZW50KFdlYkdMRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0
cmVzdG9yZWRFdmVudCwgZmFsc2UsIHRydWUsICIiKSk7Cit9CisKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpyZW1vdmVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKIHsKICAgICBtX2Nh
bnZhc09iamVjdHMucmVtb3ZlKG9iamVjdCk7CkBAIC0yODk4LDYgKzMxMDMsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRPYmplY3QoV2ViR0xPYmplY3QqIG9iamVj
dCkKIHsKKyAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CiAgICAgcmVtb3ZlT2JqZWN0KG9i
amVjdCk7CiAgICAgbV9jYW52YXNPYmplY3RzLmFkZChvYmplY3QpOwogfQpAQCAtMzQ5MSw2ICsz
Njk3LDggQEAgV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZm
ZXJEYXRhUGFyYW1ldGVycyh1bnNpZ25lZCBsb25nIHQKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBleHBlY3Rl
ZFNpemUsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQogeworICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC0z
NTIzLDYgKzM3MzEsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
ZkltcGwodW5zaWduZWQgbG9uZyBpbmRleCwgaW50IGV4cGVjdGVkUwogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZs
b2F0MzJBcnJheSogdiwgaW50IGV4cGVjdGVkU2l6ZSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2KSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAg
ICAgICByZXR1cm47CkBAIC0zNTMyLDYgKzM3NDIsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJh
eQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKHVuc2ln
bmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgaW50IGV4cGVjdGVkU2l6ZSkKIHsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2KSB7
CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCBjZTY2ZjZhMzRhMjhhMTE3NDQ1ZTBhY2E4NGI5
MDNjNjFhMzdkMmUzLi4yNGQwZjVlNmM2MjE1YWYyYzg2NWJiODdlZTIwYmFjOWFjNjYxYjcyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisr
KyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTE3Niw2
ICsxNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgbW9kZSk7CiAgICAgYm9vbCBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOwor
ICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbmFibGVkKHVuc2ln
bmVkIGxvbmcgY2FwKTsKICAgICBib29sIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciop
OwogICAgIGJvb2wgaXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwpAQCAtMjc3LDYgKzI3OCw5IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAorICAgIHZvaWQgbG9zZUNvbnRleHQo
KTsKKyAgICB2b2lkIHJlc3RvcmVDb250ZXh0KCk7CisKICAgICBHcmFwaGljc0NvbnRleHQzRCog
Z3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVy
KCk7IH0KQEAgLTI5Miw2ICsyOTYsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkdM
T2JqZWN0OwogCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50Kiwg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIHZvaWQgaW5pdGlhbGl6ZU5ld0Nv
bnRleHQoKTsKIAogICAgIHZvaWQgYWRkT2JqZWN0KFdlYkdMT2JqZWN0Kik7CiAgICAgdm9pZCBk
ZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CkBAIC0zMzMsOCArMzM4LDYgQEAgcHVibGljOgog
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIGJvb2wgbV9uZWVk
c1VwZGF0ZTsKICAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7Ci0gICAgLy8gRklYTUU6IEkg
dGhpbmsgdGhpcyBpcyBicm9rZW4gLS0gaXQgZG9lcyBub3QgaW5jcmVtZW50IGFueQotICAgIC8v
IHJlZmVyZW5jZSBjb3VudHMsIHNvIG1heSByZWZlciB0byBkZXN0cm95ZWQgb2JqZWN0cy4KICAg
ICBIYXNoU2V0PFJlZlB0cjxXZWJHTE9iamVjdD4gPiBtX2NhbnZhc09iamVjdHM7CiAKICAgICAv
LyBMaXN0IG9mIGJvdW5kIFZCTydzLiBVc2VkIHRvIG1haW50YWluIGluZm8gYWJvdXQgc2l6ZXMg
Zm9yIEFSUkFZX0JVRkZFUiBhbmQgc3RvcmVkIHZhbHVlcyBmb3IgRUxFTUVOVF9BUlJBWV9CVUZG
RVIKQEAgLTQyMSw2ICs0MjQsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9uZyBtX2ltcGxl
bWVudGF0aW9uQ29sb3JSZWFkVHlwZTsKICAgICBib29sIG1fdW5wYWNrRmxpcFk7CiAgICAgYm9v
bCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGE7CisgICAgYm9vbCBtX2NvbnRleHRMb3N0OwogCiAg
ICAgLy8gSGVscGVycyBmb3IgZ2V0UGFyYW1ldGVyIGFuZCBvdGhlcnMKICAgICBXZWJHTEdldElu
Zm8gZ2V0Qm9vbGVhblBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbCBiL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAppbmRleCBmNzY2NDZkYTRiZmFl
NmY5MGFjYzI4NzdiYzRiMDQ0MmY5NDJiYjNjLi5jNDVlODgwMGI3NTZiMTU3MWRiODIzODljZTRi
MTdhMTQzMjZlNDNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5pZGwKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaWRsCkBAIC00NjMsNiArNDYzLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICAvKiBX
ZWJHTC1zcGVjaWZpYyBlbnVtcyAqLwogICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVU5QQUNL
X0ZMSVBfWV9XRUJHTCAgICAgICAgICAgID0gMHg5MjQwOwogICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMID0gMHg5MjQxOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgQ09OVEVYVF9MT1NUX1dFQkdMICAgICAgICAgICAgID0gMHg5MjQy
OwogCiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBhY3RpdmVUZXh0
dXJlKGluIHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAg
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBhdHRhY2hTaGFkZXIoaW4gV2Vi
R0xQcm9ncmFtIHByb2dyYW0sIGluIFdlYkdMU2hhZGVyIHNoYWRlcikgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7CkBAIC01NTEsMTggKzU1MiwxOCBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCBnZXRQYXJhbWV0ZXIoKTsKICAgICAgICAgLy8g
YW55IGdldFByb2dyYW1QYXJhbWV0ZXIoaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0sIGluIHVuc2ln
bmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgZ2V0UHJvZ3JhbVBhcmFtZXRlcigpOwotICAgICAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coaW4gV2ViR0xQ
cm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBnZXRQcm9ncmFt
SW5mb0xvZyhpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAg
ICAgICAgIC8vIGFueSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoaW4gdW5zaWduZWQgbG9uZyB0
YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAg
ICAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyKCk7CiAgICAgICAgIC8vIGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoaW4gV2ViR0xTaGFk
ZXIgc2hhZGVyLCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
ICAgICAgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIGdldFNoYWRlclBhcmFt
ZXRlcigpIHJhaXNlcyhET01FeGNlcHRpb24pOwogCi0gICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKGluIFdlYkdMU2hhZGVyIHNoYWRlcikg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIENvbnZl
cnROdWxsU3RyaW5nVG89TnVsbF0gRE9NU3RyaW5nICAgIGdldFNoYWRlckluZm9Mb2coaW4gV2Vi
R0xTaGFkZXIgc2hhZGVyKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAgICAgICAvLyBUQkQK
ICAgICAgICAgLy8gdm9pZCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAoR0xlbnVtIHNoYWRl
cnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNp
b24pOwogCi0gICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIERPTVN0cmluZyAgICBnZXRTaGFk
ZXJTb3VyY2UoaW4gV2ViR0xTaGFkZXIgc2hhZGVyKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAg
ICAgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ29udmVydE51bGxTdHJpbmdUbz1OdWxsXSBET01T
dHJpbmcgICAgZ2V0U2hhZGVyU291cmNlKGluIFdlYkdMU2hhZGVyIHNoYWRlcikgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CiAKICAgICAgICAgLy8gYW55IGdldFRleFBhcmFtZXRlcihpbiB1bnNpZ25l
ZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSkgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCBnZXRUZXhQYXJh
bWV0ZXIoKTsKQEAgLTU3OSw2ICs1ODAsNyBAQCBtb2R1bGUgaHRtbCB7CiAKICAgICAgICAgW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoaW4gdW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGluIHVuc2lnbmVkIGxvbmcgbW9kZSk7CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IGJvb2xlYW4gICAgICBpc0J1ZmZlcihpbiBXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgICAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSBib29sZWFuICAgICAgaXNDb250ZXh0TG9zdCgpOwogICAgICAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSBib29sZWFuICAgICAgaXNFbmFibGVkKGluIHVuc2lnbmVk
IGxvbmcgY2FwKTsKICAgICAgICAgW1N0cmljdFR5cGVDaGVja2luZ10gYm9vbGVhbiAgICAgIGlz
RnJhbWVidWZmZXIoaW4gV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CiAgICAgICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIGJvb2xlYW4gICAgICBpc1Byb2dyYW0oaW4gV2ViR0xQcm9ncmFt
IHByb2dyYW0pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oCmluZGV4IDIwYjRlMmQxOTc4YmY3ODIwNGFmYTE5NzQzNWVhZWE1NGMyNDMzYjcuLjBiN2Qz
ODhiNWQxMWMxODExZThjZDEzNWU4M2VkODEyZDcxOTZmYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTQwMSw2ICs0MDEsNyBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIFdlYkdMLXNwZWNpZmljIGVudW1zCiAgICAgICAgIFVOUEFDS19GTElQ
X1lfV0VCR0wgPSAweDkyNDAsCiAgICAgICAgIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJH
TCA9IDB4OTI0MSwKKyAgICAgICAgQ09OVEVYVF9MT1NUX1dFQkdMID0gMHg5MjQyLAogCiAgICAg
ICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogICAgICAgICBCR1JBX0VYVCA9
IDB4ODBFMSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72729</attachid>
            <date>2010-11-02 13:52:14 -0700</date>
            <delta_ts>2010-11-02 15:03:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35626-20101102135213.patch</filename>
            <type>text/plain</type>
            <size>90598</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDIzMjVkYzY2YjYwNmY0YTg0MDdjNzhiOWQyNjBhOWZhOGFkN2Y3MS4uYzAwMDcxYTBjYTFkODcz
MDgzZTMwNTUxMzQ4NTJjODEyNDdiYTg1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjQgQEAKKzIwMTAtMTEtMDIgIEFk
cmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgbG9zdCwgcmVzdG9yZWQsIGFuZCBj
cmVhdGlvbiBmYWlsdXJlIGNvbnRleHQgZXZlbnRzIGZvcgorICAgICAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuICBUaGUgbG9zdCBhbmQgcmVzdG9yZWQgZnVuY3Rpb25zIGFyZSBub3QgaG9va2Vk
CisgICAgICAgIHVwIHlldCwgYnV0IHRoZSBjb250ZXh0IG5vdyBhY3RzIGFjY29yZGluZyB0byB0
aGUgc3BlYyBhcyBpdCBzaG91bGQKKyAgICAgICAgZHVyaW5nIGEgbG9zdCBjb250ZXh0LiAgVGVz
dGVkIG1hbnVhbGx5LCBhcyB0aGVyZSdzIG5vIHByb2dyYW1tYXRpYworICAgICAgICB3YXkgdG8g
bG9zZSBhIGNvbnRleHQgeWV0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzU2MjYKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnNDYWxsYmFjayk6
CisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TENvbnRleHRFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0
RXZlbnQ6OldlYkdMQ29udGV4dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4
dEV2ZW50Ojp+V2ViR0xDb250ZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250
ZXh0RXZlbnQ6OmluaXRFdmVudCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0
RXZlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRFdmVudDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEV2ZW50OjpzdGF0dXNNZXNzYWdl
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5pZGw6IEFkZGVkLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWN0aXZlVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRyaWJM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5k
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
bGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymxl
bmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJs
ZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNsZWFyU3RlbmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmN1bGxGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoTWFzayk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZmluaXNoKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVVbmlm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRCdWZmZXJQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5m
b0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFNoYWRlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcFNlcGFyYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm00aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmg6CisKIDIwMTAtMTAtMjggIERhbiBCZXJuc3RlaW4gIDxtaXR6
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjN2Rj
ZjE4MmU2NDdlNjM4OTg0YjdlMTc4YmY1Njg1YWE1ZjM1OWEzLi5mZThiNThhNjU5ZTNmOTI5Mjkx
MGQ1MjA0YWY2N2M4MDBkMTRkMzA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjE1LDYgKzIxNSw3IEBACiAgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9j
YW52YXMvV2ViR0xCdWZmZXIuaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250
ZXh0RXZlbnQuaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmlkbCcsCiAgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaWRsJywKQEAgLTE4NTQsNiAr
MTg1NSw4IEBACiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaCcsCiAgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAnLAogICAgICAg
ICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCcsCisgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwJywKKyAgICAgICAgICAgICdodG1s
L2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xGcmFt
ZWJ1ZmZlci5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEdldEluZm8uY3BwJywK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmNmMDI2M2Ex
ZWY2YTkwY2YwMTk3ZjQxYWU4NTk3NmZhYTQxZjJlYy4uMzdjN2IxZWU2YTA1YmE2OTZlZDI1MGUw
NjE2ZGIxNzZjYjUwNmNkYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTI4NjEsNiArMjg2MSw4IEBACiAJCTkzRjE5QjE1MDgyNDVFNTkwMDFFOUFCQyAv
KiBDb2NvYS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNUMyODY5NTAyODQ2RENEMDE4NjM1Q0EgLyogQ29jb2EuZnJhbWV3b3JrICov
OyB9OwogCQk5M0YxOUIxNjA4MjQ1RTU5MDAxRTlBQkMgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjgy
MTYyOTkwMjlGNEZCNTAxMDAwMTMxIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsK
IAkJOTNGMTlCMTcwODI0NUU1OTAwMUU5QUJDIC8qIGxpYmljdWNvcmUuZHlsaWIgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YxRDMxQTA1NThDQzVD
MDA4MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLzsgfTsKKwkJOTNGNkYxRUQxMjdGNzBCMTAw
NTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjZGMUVBMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENv
bnRleHRFdmVudC5jcHAgKi87IH07CisJCTkzRjZGMUVFMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJH
TENvbnRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNGNkYxRUIxMjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmggKi87
IH07CiAJCTkzRjkyNTQzMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y5MjU0MTBG
N0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjkyNTQ0MEY3RUY1QjgwMDdFMzdD
OSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjkyNTQyMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFk
aW9CdXR0b25zLmNwcCAqLzsgfTsKIAkJOTNGOUI2NTcwQkEwRjM1RTAwODU0MDY0IC8qIERPTUhU
TUxDYW52YXNFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNGOUI2NTQwQkEwRjM1RTAwODU0MDY0IC8qIERPTUhUTUxDYW52YXNFbGVtZW50
Lm1tICovOyB9OwpAQCAtODkxOSw2ICs4OTIxLDkgQEAKIAkJOTNGMTlCMTkwODI0NUU1OTAwMUU5
QUJDIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gSW5mby5w
bGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCTkzRjE5QjFBMDgyNDVFNUEwMDFFOUFCQyAvKiBXZWJDb3JlLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5mcmFt
ZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYkNvcmUuZnJhbWV3b3JrOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5M0YxRDMxQTA1NThDQzVDMDA4MjFC
QzAgLyogbGliaWN1Y29yZS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliaWN1Y29y
ZS5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmljdWNvcmUuZHlsaWI7IHNvdXJjZVRyZWUgPSAi
PGFic29sdXRlPiI7IH07CisJCTkzRjZGMUVBMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRl
eHRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTENv
bnRleHRFdmVudC5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0Y2RjFFQjEyN0Y3MEIxMDA1NUNCMDYgLyogV2Vi
R0xDb250ZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xD
b250ZXh0RXZlbnQuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRFdmVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5M0Y2RjFFQzEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xD
b250ZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMQ29udGV4dEV2ZW50
LmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzRjhCMzA1MEEzMDBGRTEwMEY2MUFCOCAvKiBDb2RlR2VuZXJhdG9y
LnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3IucG07
IHBhdGggPSBzY3JpcHRzL0NvZGVHZW5lcmF0b3IucG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzRjhCMzA2MEEzMDBGRUEwMEY2MUFCOCAvKiBDb2RlR2VuZXJhdG9ySlMucG0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gQ29kZUdlbmVyYXRvckpTLnBtOyBwYXRo
ID0gLi4vc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHdyYXBzTGluZXMgPSAwOyB9OwogCQk5M0Y4QjMwNzBBMzAwRkVBMDBGNjFBQjggLyogZ2VuZXJh
dGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gImdlbmVy
YXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsIjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTMzLDYgKzEyNTM4LDkgQEAKIAkJCQk2
RTRFOTFBOTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8s
CiAJCQkJNkU0RTkxQUExMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMu
aCAqLywKIAkJCQk2RTRFOTFBQjEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5pZGwgKi8sCisJCQkJOTNGNkYxRUExMjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4
dEV2ZW50LmNwcCAqLywKKwkJCQk5M0Y2RjFFQjEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250
ZXh0RXZlbnQuaCAqLywKKwkJCQk5M0Y2RjFFQzEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250
ZXh0RXZlbnQuaWRsICovLAogCQkJCTQ5QzdCOUFFMTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEZy
YW1lYnVmZmVyLmNwcCAqLywKIAkJCQk0OUM3QjlBRjEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xG
cmFtZWJ1ZmZlci5oICovLAogCQkJCTQ5QzdCOUIwMTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEZy
YW1lYnVmZmVyLmlkbCAqLywKQEAgLTIxMTg0LDYgKzIxMTkyLDcgQEAKIAkJCQkwODdCODQ5NjEy
NzJDRUM4MDBBMTQ0MTcgLyogU1ZHQW5pbWF0ZWRBbmdsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MDhDODU5QzAxMjc0NTc1NDAwQTU3MjhEIC8qIFNWR0FuaW1hdGVkUmVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzU4OTc4RUQxMjcwOTBENjAwNzZENUE5IC8qIFNwZWVjaElucHV0UmVzdWx0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk5M0Y2RjFFRTEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250
ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjM3NDAsNiArMjM3NDksNyBAQAogCQkJCTdB
MUYyQjUyMTI2QzYxQjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTEzRjAxRjExMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQk3NTg5NzhFQzEyNzA5MEQ2MDA3NkQ1QTkgLyogU3BlZWNoSW5w
dXRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNGNkYxRUQxMjdGNzBCMTAwNTVDQjA2
IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCmluZGV4IDkzNDZhMDU0N2M4NDFmODg0NjNmNzM2ZTY1YjgyNzEwOWZmNGU2NGEuLmIy
MjQwZWRjMmNlMDg0ZjhjM2I2OGJhNDE0N2VjYmI5NGY3ODE3NTQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAKQEAgLTIzNiwxMCArMjM2LDEwIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzQ2FsbGJhY2soY29uc3QKICAg
ICBib29sIHN1Y2NlZWQgPSBjb250ZXh0LT5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgc2hh
ZGVycywgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRp
b24oZWMpOwotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4g
djg6Ok51bGwoKTsKICAgICB9CiAgICAgaWYgKCFzdWNjZWVkKQotICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKICAgICB2ODo6TG9jYWw8
djg6OkFycmF5PiBhcnJheSA9IHY4OjpBcnJheTo6TmV3KHNoYWRlcnMuc2l6ZSgpKTsKICAgICBm
b3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXplKCk7ICsraWkpCiAgICAgICAgIGFy
cmF5LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpaSksIHRvVjgoc2hhZGVyc1tpaV0pKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaCBiL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMu
aAppbmRleCA2NDQwMDAwMWUxNmFhZmIxNTU5NmM3NTA1MjM3NTgxNDFmMjJhZmQ4Li5hZWFkMmJj
MWQyODQ2YzVjYjBmZDY4NmY2NDY0ZmRjZDA3NzkzZjUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9FdmVudE5hbWVzLmgKKysrIGIvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCkBAIC0xNjgsNyAr
MTY4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBcCiAgICAgbWFjcm8od2Via2l0ZnVs
bHNjcmVlbmNoYW5nZSkgXAogICAgIFwKLSAgICBtYWNybyh3ZWJraXRzcGVlY2hjaGFuZ2UpCisg
ICAgbWFjcm8od2Via2l0c3BlZWNoY2hhbmdlKSBcCisgICAgXAorICAgIG1hY3JvKHdlYmdsY29u
dGV4dGxvc3QpIFwKKyAgICBtYWNybyh3ZWJnbGNvbnRleHRyZXN0b3JlZCkgXAorICAgIG1hY3Jv
KHdlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IpIFwKICAgICBcCiAvLyBlbmQgb2YgRE9NX0VWRU5U
X05BTUVTX0ZPUl9FQUNICiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xD
b250ZXh0RXZlbnQuY3BwIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjdhMjc3ZmU2MGUwYTkzMjI1Mjc1OWZmMzRjOTY0MjMyNjc3YWQzYwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQu
Y3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViR0xDb250ZXh0RXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJHTENv
bnRleHRFdmVudDo6V2ViR0xDb250ZXh0RXZlbnQoKQoreworfQorCitXZWJHTENvbnRleHRFdmVu
dDo6V2ViR0xDb250ZXh0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1
YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJpbmcmIHN0YXR1c01lc3NhZ2UpCisgICAg
OiBFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUpCisgICAgLCBtX3N0YXR1c01lc3Nh
Z2Uoc3RhdHVzTWVzc2FnZSkKK3sKK30KKworV2ViR0xDb250ZXh0RXZlbnQ6On5XZWJHTENvbnRl
eHRFdmVudCgpCit7Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0RXZlbnQ6OmluaXRFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNv
bnN0IFN0cmluZyYgc3RhdHVzTWVzc2FnZSkKK3sKKyAgICBpZiAoZGlzcGF0Y2hlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBFdmVudDo6aW5pdEV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2Fu
Y2VsYWJsZSk7CisgICAgbV9zdGF0dXNNZXNzYWdlID0gc3RhdHVzTWVzc2FnZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbnRleHRFdmVudC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM0ODc2OWI3ZTI4ODYwNDJjMWRmZmMwM2ZiMzVkNGYwZTA2MDYxNWUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmgK
QEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViR0xDb250ZXh0RXZlbnRfaAorI2Rl
ZmluZSBXZWJHTENvbnRleHRFdmVudF9oCisKKyNpbmNsdWRlICJFdmVudC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFdlYkdMQ29udGV4dEV2ZW50IDogcHVibGljIEV2ZW50IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRFdmVudD4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xDb250ZXh0RXZlbnQp
OworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRFdmVudD4gY3JlYXRl
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJs
ZSwgY29uc3QgU3RyaW5nJiBzdGF0dXNNZXNzYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBXZWJHTENvbnRleHRFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUs
IHN0YXR1c01lc3NhZ2UpKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViR0xDb250ZXh0RXZlbnQo
KTsKKworICAgIHZvaWQgaW5pdEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBj
YW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgU3RyaW5nJiBzdGF0dXNNZXNzYWdlKTsK
KworICAgIGNvbnN0IFN0cmluZyYgc3RhdHVzTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dHVzTWVzc2FnZTsgfQorCitwcml2YXRlOgorICAgIFdlYkdMQ29udGV4dEV2ZW50KCk7CisgICAg
V2ViR0xDb250ZXh0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJs
ZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJpbmcmIHN0YXR1c01lc3NhZ2UpOworCisgICAg
U3RyaW5nIG1fc3RhdHVzTWVzc2FnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFdlYkdMQ29udGV4dEV2ZW50X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaWRsIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENv
bnRleHRFdmVudC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA5NzNhOTBhMzk4YmE4NzA3YzYwOGU2YWRlNDg0
MjJlZDJiM2YyOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xD
b250ZXh0RXZlbnQuaWRsCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgaHRtbCB7Cisg
ICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9M0RfQ0FOVkFTLAorICAgIF0gV2Vi
R0xDb250ZXh0RXZlbnQgOiBFdmVudCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgc3RhdHVzTWVzc2FnZTsKKyAgICAgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCBp
bml0RXZlbnQoaW4gRE9NU3RyaW5nIGV2ZW50VHlwZUFyZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5CdWJibGVBcmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gY2FuY2VsYWJs
ZUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRE9N
U3RyaW5nIHN0YXR1c01lc3NhZ2VBcmcpOworICAgIH07Cit9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggYTQ1YWExYTQxZGQ2YTYwYjVhZjhl
ZTNjZTU0ZjNiZDliNDk4OThiMi4uYTgzNmQzNTRkMTAzMDJmNzEzZDJiMmMxMTRkODlhOTEyYjBh
MjljMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIldlYkdMQWN0aXZlSW5mby5oIgogI2luY2x1
ZGUgIldlYkdMQnVmZmVyLmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgor
I2luY2x1ZGUgIldlYkdMQ29udGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZl
ci5oIgogI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVm
ZmVyLmgiCkBAIC05MCw4ICs5MSwxMCBAQCBQYXNzT3duUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4
dD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoSFRNTENhbnZhc0VsZW1lbgogICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGVtcHR5QXR0cmlidXRlczsKICAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRy
cyA/IGF0dHJzLT5hdHRyaWJ1dGVzKCkgOiBlbXB0eUF0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsK
IAotICAgIGlmICghY29udGV4dCkKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgY2FudmFz
LT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndl
YmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2UsIHRydWUsICJDb3VsZCBub3QgY3Jl
YXRlIGEgV2ViR0wgY29udGV4dC4iKSk7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICAg
ICAgCiAgICAgcmV0dXJuIG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBjb250ZXh0
KTsKIH0KQEAgLTk5LDE5ICsxMDIsMzIgQEAgUGFzc093blB0cjxXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKEhUTUxDYW52YXNFbGVtZW4KIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50
KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiAg
ICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKICAgICAsIG1fY29udGV4
dChjb250ZXh0KQotICAgICwgbV9uZWVkc1VwZGF0ZSh0cnVlKQotICAgICwgbV9tYXJrZWRDYW52
YXNEaXJ0eShmYWxzZSkKLSAgICAsIG1fYWN0aXZlVGV4dHVyZVVuaXQoMCkKICAgICAsIG1fdmlk
ZW9DYWNoZSg0KQotICAgICwgbV9wYWNrQWxpZ25tZW50KDQpCi0gICAgLCBtX3VucGFja0FsaWdu
bWVudCg0KQotICAgICwgbV91bnBhY2tGbGlwWShmYWxzZSkKLSAgICAsIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYShmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3QoZmFsc2UpCiB7CiAgICAgQVNT
RVJUKG1fY29udGV4dCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0KCkKK3sKKyAgICBtX25l
ZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAg
bV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7CisgICAgbV9wYWNrQWxpZ25tZW50ID0gNDsKKyAgICBt
X3VucGFja0FsaWdubWVudCA9IDQ7CisgICAgbV91bnBhY2tGbGlwWSA9IGZhbHNlOworICAgIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOworICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9
IDA7CisgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlciA9IDA7CisgICAgbV9jdXJyZW50UHJv
Z3JhbSA9IDA7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgIG1fcmVuZGVyYnVm
ZmVyQmluZGluZyA9IDA7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5jbGVhcigpOwogCiAgICAg
aW50IG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VO
SVRTLCAmbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgbV90ZXh0dXJlVW5pdHMu
Y2xlYXIoKTsKICAgICBtX3RleHR1cmVVbml0cy5yZXNpemUobnVtQ29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cyk7CiAKICAgICBpbnQgbnVtVmVydGV4QXR0cmlicyA9IDA7CkBAIC0xOTksNiArMjE1
LDggQEAgaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoaW50IHR5cGUpCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRl
eHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICh0ZXh0dXJlIC0g
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwID49IG1fdGV4dHVyZVVuaXRzLnNpemUoKSkgewog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0pOwogICAgICAgICByZXR1cm47CkBAIC0yMTEsNyArMjI5LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJl
LCBFeGNlcHRpb25Db2RlJgogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRl
cihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdM
T2JqZWN0KHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFwcm9n
cmFtLT5hdHRhY2hTaGFkZXIoc2hhZGVyKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CkBAIC0yMjUs
NyArMjQzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcihXZWJH
TFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGEKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25l
ZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dy
YW0pKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJv
Z3JhbSkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlv
bihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMjM0LDYgKzI1Miw4IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNp
Z25lZCBsCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjYyLDYgKzI4Miw4IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBXZWJHTEJ1ZmZlciogYnVmZmVyCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZy
YW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBidWZmZXIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChidWZmZXIgJiYgYnVmZmVy
LT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVy
bjsKQEAgLTI4MCw2ICszMDIsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZy
YW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZgogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQs
IFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJCdWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAg
cmV0dXJuOwogICAgIGlmIChyZW5kZXJCdWZmZXIgJiYgcmVuZGVyQnVmZmVyLT5jb250ZXh0KCkg
IT0gdGhpcykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKQEAgLTI5Nyw2
ICszMjEsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5kZXJidQogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRl
eHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICh0ZXh0dXJlICYm
IHRleHR1cmUtPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzMwLDEzICszNTYsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHQK
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kQ29sb3IoZG91YmxlIHJlZCwgZG91
YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKQogeworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKHVuc2ln
bmVkIGxvbmcgbW9kZSkKIHsKLSAgICBpZiAoIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24obW9kZSkp
CiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb24obW9kZSk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTM0NCw3ICszNzIsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvbih1bnNpZ25lZCBsb25nIG1v
ZGUpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUo
dW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSkKIHsKLSAgICBp
ZiAoIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0
aW9uKG1vZGVBbHBoYSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVCbGVu
ZEVxdWF0aW9uKG1vZGVSR0IpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24obW9kZUFscGhhKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1v
ZGVSR0IsIG1vZGVBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
QEAgLTM1MywxMiArMzgxLDE2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lCiAKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNp
Z25lZCBsb25nIGRmYWN0b3IpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAg
cmV0dXJuOwogICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9ICAgICAgIAogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0Is
IHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBs
b25nIGRzdEFscGhhKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVy
bjsKICAgICBtX2NvbnRleHQtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNB
bHBoYSwgZHN0QWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CkBAIC0zNjYsNiArMzk4LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVu
Y1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb24KIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6
ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAg
ICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFy
Z2V0LCB1c2FnZSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTM4Myw2
ICs0MTcsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVuc2lnbmVkCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEs
IHVuc2lnbmVkIGxvbmcgdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdl
dCwgdXNhZ2UpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC00MDAsNiAr
NDM2LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQg
bG9uZyB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogZGF0
YSwgdW5zaWduZWQgbG9uZyB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAg
ICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFy
Z2V0LCB1c2FnZSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTQxNyw2
ICs0NTUsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYQogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBB
cnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgV2Vi
R0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFyZ2V0LCBH
cmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm47CkBAIC00MzQsNiArNDc0LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBBcnIKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisg
ICAgICAgIHJldHVybjsKICAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJE
YXRhUGFyYW1ldGVycyh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1MCw2ICs0OTIsOCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgbG9uZyBvZmZzZXQsIEFycgogCiB1bnNpZ25lZCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkKIHsKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJldHVybiAwOwpAQCAt
NDYyLDYgKzUwNiw4IEBAIHVuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0CiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjbGVhcih1bnNpZ25lZCBsb25nIG1hc2spCiB7CisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChtYXNrICYgfihHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZG
RVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpIHsKICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ3Miw2ICs1MTgsOCBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIodW5zaWduZWQgbG9uZyBtYXNrKQogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xvcihkb3VibGUgciwgZG91YmxlIGcsIGRvdWJsZSBi
LCBkb3VibGUgYSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47
CiAgICAgaWYgKGlzbmFuKHIpKQogICAgICAgICByID0gMDsKICAgICBpZiAoaXNuYW4oZykpCkBA
IC00ODYsMTggKzUzNCwyNCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xv
cihkb3VibGUgciwgZG91YmxlIGcsIGRvdWJsZSBiLCBkb3VibGUgYSkKIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKQogeworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgo
ZGVwdGgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwobG9uZyBzKQogeworICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmNsZWFyU3Rl
bmNpbChzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBi
b29sIGJsdWUsIGJvb2wgYWxwaGEpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtNTA1LDcg
KzU1OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2soYm9vbCByZWQs
IGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVj
dChzaGFkZXIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRl
cihvYmplY3RPclplcm8oc2hhZGVyKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKQEAgLTUxMyw2ICs1NjcsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29t
cGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYwogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3Jk
ZXIpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
ICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUpKQogICAgICAgICByZXR1cm47CiAgICAgV2ViR0xUZXh0dXJlKiB0
ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgdHJ1ZSk7CkBAIC01NDAsNiArNTk2
LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnMKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvcHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBs
b25nIHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybjsKICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVy
ZUJpbmRpbmcodGFyZ2V0LCB0cnVlKTsKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwpA
QCAtNTU3LDYgKzYxNSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3Vi
SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwKIAogUGFzc1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQogeworICAg
IGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJH
TEJ1ZmZlcj4gbyA9IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7CiAgICAgYWRkT2JqZWN0KG8u
Z2V0KCkpOwogICAgIHJldHVybiBvOwpAQCAtNTY0LDYgKzYyNCw4IEBAIFBhc3NSZWZQdHI8V2Vi
R0xCdWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKICAgICAgICAg
CiBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlRnJhbWVidWZmZXIoKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJl
dHVybiAwOwogICAgIFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZl
cjo6Y3JlYXRlKHRoaXMpOwogICAgIGFkZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsK
QEAgLTU3MSw2ICs2MzMsOCBAQCBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogCiBQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKIHsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xUZXh0
dXJlPiBvID0gV2ViR0xUZXh0dXJlOjpjcmVhdGUodGhpcyk7CiAgICAgYWRkT2JqZWN0KG8uZ2V0
KCkpOwogICAgIHJldHVybiBvOwpAQCAtNTc4LDYgKzY0Miw4IEBAIFBhc3NSZWZQdHI8V2ViR0xU
ZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQogCiBQYXNzUmVm
UHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkK
IHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQ
dHI8V2ViR0xQcm9ncmFtPiBvID0gV2ViR0xQcm9ncmFtOjpjcmVhdGUodGhpcyk7CiAgICAgYWRk
T2JqZWN0KG8uZ2V0KCkpOwogICAgIHJldHVybiBvOwpAQCAtNTg1LDYgKzY1MSw4IEBAIFBhc3NS
ZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVByb2dyYW0o
KQogCiBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBvID0gV2ViR0xSZW5k
ZXJidWZmZXI6OmNyZWF0ZSh0aGlzKTsKICAgICBhZGRPYmplY3Qoby5nZXQoKSk7CiAgICAgcmV0
dXJuIG87CkBAIC01OTMsNiArNjYxLDggQEAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQogUGFzc1JlZlB0cjxX
ZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIodW5zaWduZWQg
bG9uZyB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmICh0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSICYmIHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1
cm4gMDsKQEAgLTYwNSwxMyArNjc1LDE1IEBAIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSwKIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmN1bGxGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0
LT5jdWxsRmFjZShtb2RlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVy
KiBidWZmZXIpCiB7Ci0gICAgaWYgKCFidWZmZXIpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhYnVmZmVyKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYnVmZmVyLT5kZWxldGVPYmpl
Y3QoKTsKQEAgLTYzMyw3ICs3MDUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKIHsK
LSAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWZyYW1l
YnVmZmVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGZyYW1lYnVmZmVyID09IG1fZnJhbWVi
dWZmZXJCaW5kaW5nKSB7CiAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKQEAgLTY0
NSw3ICs3MTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZm
ZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBpZiAo
IXByb2dyYW0pCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhcHJvZ3JhbSkKICAgICAgICAg
cmV0dXJuOwogICAgIGlmIChwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTik7CkBAIC02NTgsNyArNzMwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJi
dWZmZXIpCiB7Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlbmRlcmJ1ZmZl
ciA9PSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcpCiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGlu
ZyA9IDA7CkBAIC02NjksNyArNzQxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIp
CiB7Ci0gICAgaWYgKCFzaGFkZXIpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhc2hhZGVy
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgc2hhZGVyLT5kZWxldGVPYmplY3QoKTsKQEAg
LTY3Nyw3ICs3NDksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlU2hhZGVy
KFdlYkdMU2hhZGVyKiBzaGFkZXIpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxl
dGVUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKIHsKLSAgICBpZiAoIXRleHR1cmUpCisg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdGV4dHVyZSkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIHRleHR1cmUtPmRlbGV0ZU9iamVjdCgpOwpAQCAtNjg3LDE4ICs3NTksMjQgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0
dXJlKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhGdW5jKHVuc2lnbmVkIGxv
bmcgZnVuYykKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAg
ICAgbV9jb250ZXh0LT5kZXB0aEZ1bmMoZnVuYyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoTWFzayhi
b29sIGZsYWcpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwog
ICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKGZsYWcpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdl
KGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTcwNiw3ICs3ODQs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhSYW5nZShkb3VibGUgek5lYXIs
IGRvdWJsZSB6RmFyKQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFwcm9ncmFt
LT5kZXRhY2hTaGFkZXIoc2hhZGVyKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CkBAIC03MjAsNyAr
Nzk4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGEKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApCiB7Ci0gICAgaWYgKCF2YWxpZGF0ZUNh
cGFiaWxpdHkoY2FwKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFi
aWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXAp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC03MjksNiArODA3LDgg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUodW5zaWduZWQgbG9uZyBjYXAp
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVu
c2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTkyNSw3ICsxMDA1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW4KIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwogCi0gICAgaWYgKCF2YWxpZGF0ZURyYXdNb2RlKG1vZGUp
KQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRHJhd01vZGUobW9kZSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChmaXJzdCA8IDAgfHwgY291bnQgPCAwKSB7CkBAIC05
NjYsNyArMTA0Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMo
dW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGNvdW50LCB1bnNpZ25lCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKIAotICAgIGlmICghdmFsaWRhdGVEcmF3TW9kZShtb2RlKSkKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKG1vZGUpKQogICAgICAgICByZXR1cm47
CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTEwMjMsNyArMTEwMyw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGNv
dW50LCB1bnNpZ25lCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUodW5zaWdu
ZWQgbG9uZyBjYXApCiB7Ci0gICAgaWYgKCF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAg
cmV0dXJuOwogICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKQEAgLTEwMzIsNiArMTExMiw4IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjplbmFibGUodW5zaWduZWQgbG9uZyBjYXApCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4
QXR0cmlicykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTA0OCw2ICsx
MTMwLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZpbmlzaCgpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIG1fY29udGV4dC0+ZmluaXNoKCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKHRydWUpOwogfQpAQCAtMTA1NSw2ICsxMTM5LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZpbmlzaCgpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgpCiB7
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4
dC0+Zmx1c2goKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CkBAIC0x
MDYyLDcgKzExNDgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2goKQogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVu
ZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVGcmFtZWJ1
ZmZlckZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgYXR0YWNobWVudCkpCisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgYXR0
YWNobWVudCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAocmVuZGVyYnVmZmVydGFyZ2V0ICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKQEAgLTEx
MTQsNyArMTIwMCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdMVGV4
dHVyZSogdGV4dHVyZSwgbG9uZyBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVy
cyh0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlk
YXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGF0dGFjaG1lbnQpKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKGxldmVsKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwpAQCAtMTEzOCwxMiAr
MTIyNCwxNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJl
MkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpmcm9udEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQogeworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmZyb250RmFjZShtb2Rl
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCiB7
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIGZhbHNlKTsKICAgICBp
ZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3Miw5ICsxMjYyLDkgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdlbmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQog
UGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0
aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBBY3RpdmVJbmZv
IGluZm87Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAg
IHJldHVybiAwOworICAgIEFjdGl2ZUluZm8gaW5mbzsKICAgICBpZiAoIW1fY29udGV4dC0+Z2V0
QWN0aXZlQXR0cmliKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8pKQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gV2ViR0xBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1l
LCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7CkBAIC0xMTgzLDkgKzEyNzMsOSBAQCBQYXNzUmVmUHRy
PFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIo
V2ViR0xQcm9ncmFtKgogUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVk
IGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9n
cmFtKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHBy
b2dyYW0pKQogICAgICAgICByZXR1cm4gMDsKKyAgICBBY3RpdmVJbmZvIGluZm87CiAgICAgaWYg
KCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRl
eCwgaW5mbykpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KQpAQCAtMTE5OCw3ICsxMjg4LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0
dGFjaGVkU2hhZGVycyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIFZlY3RvcjxXZWIKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwogICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsKLSAgICBpZiAoIXZh
bGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGludCBudW1TaGFkZXJzID0gMDsKICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RP
clplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTLCAmbnVt
U2hhZGVycyk7CkBAIC0xMjIzLDEyICsxMzEzLDE2IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBWZWN0b3I8V2Vi
CiAKIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogeworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRy
aWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwogfQogCiBXZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiAmJiB0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJS
QVlfQlVGRkVSKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKQEAgLTEyNDksNiArMTM0Myw4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEJ1ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zCiAKIFBhc3NS
ZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRD
b250ZXh0QXR0cmlidXRlcygpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAg
cmV0dXJuIDA7CiAgICAgLy8gV2UgYWx3YXlzIG5lZWQgdG8gcmV0dXJuIGEgbmV3IFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMgb2JqZWN0IHRvCiAgICAgLy8gcHJldmVudCB0aGUgdXNlciBmcm9tIG11
dGF0aW5nIGFueSBjYWNoZWQgdmVyc2lvbi4KICAgICByZXR1cm4gV2ViR0xDb250ZXh0QXR0cmli
dXRlczo6Y3JlYXRlKG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSk7CkBAIC0xMjYy
LDcgKzEzNTgsNyBAQCB1bnNpZ25lZCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXJy
b3IoKQogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0
dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFt
ZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKICAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBF
OgpAQCAtMTMxMCw2ICsxNDA2LDggQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHVuc2lnbmVkIGwKIFdlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBX
ZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKQEAgLTE1MDEsNyArMTU5
OSw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcih1
bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25DCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5z
aWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOwogCiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZh
bHNlKTsKQEAgLTE1MzAsOCArMTYyOCw4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1CiBTdHJp
bmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0q
IHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQotICAgICAgICByZXR1cm4gIiI7
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFt
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlz
LCBmYWxzZSk7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2cob2JqZWN0
T3JaZXJvKHByb2dyYW0pKTsKIH0KQEAgLTE1MzksNiArMTYzNyw4IEBAIFN0cmluZyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
RXhjZXB0aW9uCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIGlmICh0
YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewogICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0p
OwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CkBAIC0xNTcyLDcgKzE2NzIsNyBAQCBX
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIodW5zaWduZWQgbG9uZyB0YXJnZQogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcg
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKICAgICBpbnQg
dmFsdWUgPSAwOwpAQCAtMTU5Nyw4ICsxNjk3LDggQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIHVuc2kK
IFN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFk
ZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIi
OworICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVy
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlz
LCBmYWxzZSk7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhvYmplY3RP
clplcm8oc2hhZGVyKSk7CiB9CkBAIC0xNjA2LDggKzE3MDYsOCBAQCBTdHJpbmcgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2Vw
dGlvbkNvZAogU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291cmNlKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCi0gICAgICAgIHJl
dHVybiAiIjsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KHNoYWRlcikpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBXZWJHTFN0YXRlUmVzdG9y
ZXIodGhpcywgZmFsc2UpOwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldFNoYWRlclNvdXJjZShv
YmplY3RPclplcm8oc2hhZGVyKSk7CiB9CkBAIC0xNjE1LDYgKzE3MTUsOCBAQCBTdHJpbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwg
RXhjZXB0aW9uQ29kZQogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4
UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBXZWJHTFRleHR1
cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0LCBmYWxzZSk7CiAgICAgaWYg
KCF0ZXgpCiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKQEAgLTE2MzYsNyArMTczOCw3
IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIHVuaWZvcm1Mb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFt
KSkKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIGlmICghdW5pZm9ybUxvY2F0
aW9uKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwpAQCAtMTc4MCw3ICsxODgyLDcgQEAgV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0s
IGNvbnN0IFdlYkcKIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIGxvbmcg
dW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBuYW1lKTsKQEAgLTE3OTIsNiArMTg5NCw4IEBAIFBhc3NSZWZQdHI8V2Vi
R0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0
aW9uKFdlYkdMCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhB
dHRyaWIodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgV2ViR0xTdGF0ZVJlc3Rv
cmVyKHRoaXMsIGZhbHNlKTsKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7
CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOwpAQCAtMTgzOSw2ICsxOTQzLDggQEAgV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVu
c2lnbmUKIAogbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNl
dCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogeworICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiAwOwogICAgIGxvbmcgcmVzdWx0ID0gbV9j
b250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xODQ2LDYg
KzE5NTIsOCBAQCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpCiB7
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICh0YXJn
ZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UKSB7CiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE4NTYsMjIgKzE5NjQsMjcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgbW9kZSkKIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKFdlYkdMQnVm
ZmVyKiBidWZmZXIpCiB7Ci0gICAgaWYgKCFidWZmZXIpCisgICAgaWYgKCFidWZmZXIgfHwgaXND
b250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gbV9jb250
ZXh0LT5pc0J1ZmZlcihidWZmZXItPm9iamVjdCgpKTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmlzQ29udGV4dExvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRM
b3N0OworfQorCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVkKHVuc2lnbmVk
IGxvbmcgY2FwKQogewotICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCisgICAgaWYg
KCF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSB8fCBpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQoY2FwKTsKIH0KIAog
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZl
ciogZnJhbWVidWZmZXIpCiB7Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICBpZiAoIWZyYW1l
YnVmZmVyIHx8IGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOwpA
QCAtMTg3OSw3ICsxOTkyLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVi
dWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCiAKIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojppc1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIGlmICgh
cHJvZ3JhbSkKKyAgICBpZiAoIXByb2dyYW0gfHwgaXNDb250ZXh0TG9zdCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gbV9jb250ZXh0LT5pc1Byb2dyYW0ocHJvZ3JhbS0+
b2JqZWN0KCkpOwpAQCAtMTg4Nyw3ICsyMDAwLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCiAKIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVy
KQogewotICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgIGlmICghcmVuZGVyYnVmZmVyIHx8IGlz
Q29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7CkBAIC0xODk1LDcg
KzIwMDgsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNSZW5kZXJidWZmZXIoV2Vi
R0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7Ci0gICAgaWYgKCFzaGFkZXIpCisg
ICAgaWYgKCFzaGFkZXIgfHwgaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gbV9jb250ZXh0LT5pc1NoYWRlcihzaGFkZXItPm9iamVjdCgpKTsKQEAg
LTE5MDMsNyArMjAxNiw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1NoYWRlcihX
ZWJHTFNoYWRlciogc2hhZGVyKQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0
dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKIHsKLSAgICBpZiAoIXRleHR1cmUpCisgICAgaWYg
KCF0ZXh0dXJlIHx8IGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcmV0dXJuIG1fY29udGV4dC0+aXNUZXh0dXJlKHRleHR1cmUtPm9iamVjdCgpKTsKQEAgLTE5
MTEsNiArMjAyNCw4IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleHR1cmUoV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGluZVdp
ZHRoKGRvdWJsZSB3aWR0aCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb250ZXh0LT5saW5lV2lkdGgoKGZsb2F0KSB3aWR0aCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE5MTgsNyArMjAzMyw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5lV2lkdGgoZG91YmxlIHdpZHRoKQogdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZh
bGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAgIGlmICghcHJvZ3JhbS0+Z2V0QXR0YWNoZWRT
aGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpIHx8ICFwcm9ncmFtLT5nZXRB
dHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKSkgewpAQCAt
MTkzOCw2ICsyMDUzLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMKIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFy
YW0pCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIHN3
aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9Z
X1dFQkdMOgogICAgICAgICBtX3VucGFja0ZsaXBZID0gcGFyYW07CkBAIC0xOTY0LDEyICsyMDgx
LDE2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaSh1bnNpZ25lZCBs
b25nIHBuYW1lLCBsb25nIHBhcmFtKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cG9s
eWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpCiB7CisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNl
dCgoZmxvYXQpIGZhY3RvciwgKGZsb2F0KSB1bml0cyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25n
IGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIGlmICghY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgZWMgPSBT
RUNVUklUWV9FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTIwMzcsMTIgKzIxNTgsMTYgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIGxvbmcg
d2lkdGgsIGxvbmcgaGVpZ2h0LAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb250ZXh0LT5yZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9DT01QT05FTlQxNjoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKQEAg
LTIwNjUsMTIgKzIxOTAsMTYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGwKIAogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZl
cnQpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1f
Y29udGV4dC0+c2FtcGxlQ292ZXJhZ2UoKGZsb2F0KSB2YWx1ZSwgaW52ZXJ0KTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c2Npc3Nvcihsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIG1fY29udGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjA3OCw3ICsyMjA3LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNjaXNzb3IobG9uZyB4LCBsb25nIHksIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIHVuc2lnbmUKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaGFk
ZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0
ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5z
aGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZyk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTIwODYsMzYgKzIyMTUsNDggQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25z
dCBTdHJpbmcmIHN0cmkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5j
KHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5z
dGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1Nl
cGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwg
dW5zaWduZWQgbG9uZyBtYXNrKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybjsKICAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywg
cmVmLCBtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2sodW5zaWduZWQgbG9uZyBtYXNr
KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2Nv
bnRleHQtPnN0ZW5jaWxNYXNrKG1hc2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFza1NlcGFy
YXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNrKQogeworICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnN0ZW5jaWxN
YXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcCh1bnNpZ25l
ZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpCiB7
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4
dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxP
cFNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25l
ZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQogeworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRl
KGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KQEAgLTIxNjcsNyArMjMwOCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEFycmF5QnVm
ZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXZhbGlkYXRl
VGV4RnVuY0RhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEod2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICByZXR1cm47CiAgICAgdm9pZCogZGF0YSA9
IHBpeGVscyA/IHBpeGVscy0+YmFzZUFkZHJlc3MoKSA6IDA7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+
IHRlbXBEYXRhOwpAQCAtMjE5NCw2ICsyMzM1LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwg
dW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFn
ZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CkBAIC0yMjExLDYgKzIzNTQsOCBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQs
IHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+
Y2FjaGVkSW1hZ2UoKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjIy
NCw2ICsyMzY5LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRN
TENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAw
OworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoIWNh
bnZhcyB8fCAhY2FudmFzLT5idWZmZXIoKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjI1Niw2ICsyNDAzLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWdu
ZWQgdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAg
ICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvKTsKICAgICBp
ZiAoIXZpZGVvKQogICAgICAgICByZXR1cm47CkBAIC0yMjY0LDYgKzI0MTMsOCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IGxldmVsLCB1bnNpZ25lZAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1l
dGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCBwYXJh
bWYsIGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQorICAgICAgICByZXR1cm47CiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1
cmVCaW5kaW5nKHRhcmdldCwgZmFsc2UpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47
CkBAIC0yMzA5LDYgKzI0NjAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3Vi
SW1hZ2UyREJhc2UodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdQogewogICAgIC8v
IEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAw
OworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoIXZh
bGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZm9ybWF0LCB0eXBlKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGlmICghdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIHRydWUpKQpAQCAtMjMy
Miw2ICsyNDc1LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJ
bXBsKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwg
Zm9ybWF0LCB0eXBlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CkBAIC0yMzM1LDcgKzI0OTAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRGF0YSh3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscykpCisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBp
eGVscykpCiAgICAgICAgIHJldHVybjsKICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8gcGl4ZWxz
LT5iYXNlQWRkcmVzcygpIDogMDsKICAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CkBAIC0y
MzYxLDYgKzI1MTYsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2Uy
RCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBl
LCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMs
IGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBk
YXRhKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKQEAgLTIzNzQsNiArMjUzMSw4IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
bGV2ZWwsIHVuc2lnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFn
ZSgpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC0yMzg3LDYgKzI1NDYs
OCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0
YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghY2FudmFzIHx8
ICFjYW52YXMtPmJ1ZmZlcigpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CkBA
IC0yNDAwLDYgKzI1NjEsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0
eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
ZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8pOwogICAgIGlmICgh
dmlkZW8pCiAgICAgICAgIHJldHVybjsKQEAgLTI0MDksNyArMjU3Miw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
bGV2ZWwsIHVuc2lnCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNDI0LDcg
KzI1ODcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYQogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBG
bG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAxKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxv
Y2F0aW9uLCB2LCAxKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3Jt
MWZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKQEAgLTI0
MzQsNyArMjU5Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24s
IHYsIHNpemUsIDEpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDEpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUpOwpA
QCAtMjQ0NCw3ICsyNjA3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG8KIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBpbnQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0
aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNDU5LDcgKzI2MjIsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgaW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAxKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAxKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpKTsKQEAgLTI0NjksNyArMjYzMiw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAx
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCB2LCBzaXplKTsKQEAgLTI0NzksNyArMjY0Miw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgaW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9u
KQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0aW9uKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBA
IC0yNDk0LDcgKzI2NTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJm
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYQogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9u
LCB2LCAyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKGxvY2F0aW9uLCB2LCAyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0
LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgp
IC8gMik7CkBAIC0yNTA0LDcgKzI2NjcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsbwogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB2LCBzaXplIC8gMik7CkBAIC0yNTE0LDcgKzI2NzcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IGZsbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCB4LCBpbnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
bG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNTI5LDcgKzI2
OTIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMy
QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAyKSkKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9u
LCB2LCAyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CkBAIC0yNTM5
LDcgKzI3MDIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBpbnQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwg
c2l6ZSwgMikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
Y29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDIpOwpA
QCAtMjU0OSw3ICsyNzEyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhbG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTI1NjQsNyArMjcyNyw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJB
cnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDMpKQorICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24s
IHYsIDMpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKQEAgLTI1NzQs
NyArMjczNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYs
IHNpemUsIDMpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDMpKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAzKTsK
QEAgLTI1ODQsNyArMjc0Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIWxvY2F0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24t
PnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNTk5LDcgKzI3NjIsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgaW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CkBAIC0yNjA5LDcgKzI3NzIs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMykp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhs
b2NhdGlvbiwgdiwgc2l6ZSwgMykpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+
dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDMpOwpAQCAtMjYxOSw3
ICsyNzgyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3LCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhbG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTI2MzQsNyArMjc5Nyw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJB
cnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDQpKQorICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24s
IHYsIDQpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKQEAgLTI2NDQs
NyArMjgwNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYs
IHNpemUsIDQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDQpKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyA0KTsK
QEAgLTI2NTQsNyArMjgxNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxv
Y2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtMjY2OSw3ICsyODMy
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aShjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwg
diwgNCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwpAQCAtMjY3OSw3
ICsyODQyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
aW50KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNp
emUsIDQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDQpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2Nv
bnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyA0KTsKQEAg
LTI2ODksNyArMjg1Miw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50CiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDQpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRp
b24sIHRyYW5zcG9zZSwgdiwgNCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgp
LCB2LT5sZW5ndGgoKSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CkBAIC0yNjk4LDcgKzI4NjEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpbwogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA0
KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQogICAgICAgICByZXR1cm47
CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0
cmFuc3Bvc2UsIHYsIHNpemUgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwpAQCAtMjcwNyw3ICsyODcwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW8KIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlk
YXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgOSkpCisg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVy
cyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA5KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2
LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gOSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKQEAgLTI3MTYsNyArMjg3OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNp
emUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KCF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYs
IHNpemUsIDkpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgOSkpCiAgICAgICAg
IHJldHVybjsKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CkBAIC0yNzI1LDcgKzI4ODgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
bwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5
KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
ICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2
LCAxNikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCiAgICAgICAgIHJldHVybjsK
ICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRy
YW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDE2KTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMjczNCw3ICsyODk3LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0
KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRy
YW5zcG9zZSwgdiwgc2l6ZSwgMTYpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlk
YXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwg
MTYpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyAxNik7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTI3NDMsNiArMjkwNiw4IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IGlmIChwcm9ncmFtICYmIHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjc2Niw3ICsyOTMxLDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNl
cHRpb25Db2RlJiBlYykKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQog
ICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAt
MjgzNSw2ICszMDAwLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjRmdih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHMKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGxv
bmcgc2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIGxvbmcgc3RyaWRl
LCBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGlu
ZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjg3OSw2ICszMDQ2LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmRleCwgbG9uZyBzaXplLAogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogeworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoaXNuYW4oeCkpCiAgICAgICAgIHggPSAw
OwogICAgIGlmIChpc25hbih5KSkKQEAgLTI4OTEsNiArMzA2MCw0NCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dCgpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7
CisKKyAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisKKyAgICAvLyBUaGVyZSBpcyBu
byBkaXJlY3Qgd2F5IHRvIGNsZWFyIGVycm9ycyBmcm9tIGEgR0wgaW1wbGVtZW50YXRpb24gYW5k
CisgICAgLy8gbG9vcGluZyB1bnRpbCBnZXRFcnJvcigpIGJlY29tZXMgTk9fRVJST1IgbWlnaHQg
Y2F1c2UgYW4gaW5maW5pdGUgbG9vcCBpZgorICAgIC8vIHRoZSBkcml2ZXIgb3IgY29udGV4dCBp
bXBsZW1lbnRhdGlvbiBoYWQgYSBidWcuICBTbywgbG9vcCBhIHJlYXNvbmFibHkKKyAgICAvLyBs
YXJnZSBudW1iZXIgb2YgdGltZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPmdl
dEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTCk7CisKKyAgICBjYW52YXMoKS0+ZGlzcGF0Y2hFdmVu
dChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0
RXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVzdG9yZUNvbnRleHQoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBUaGUgcmVuZGVyaW5nIGNvbnRleHQgaXMgbm90IHJlc3RvcmVk
IGlmIHRoZXJlIGlzIG5vIGhhbmRsZXIgZm9yCisgICAgLy8gdGhlIGNvbnRleHQgcmVzdG9yZWQg
ZXZlbnQuCisgICAgaWYgKCFjYW52YXMoKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygp
LndlYmdsY29udGV4dHJlc3RvcmVkRXZlbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbml0
aWFsaXplTmV3Q29udGV4dCgpOworCisgICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOworICAgIGNh
bnZhcygpLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLndlYmdsY29udGV4dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOworfQorCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmpl
Y3QpCiB7CiAgICAgbV9jYW52YXNPYmplY3RzLnJlbW92ZShvYmplY3QpOwpAQCAtMjg5OCw2ICsz
MTA1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZU9iamVjdChXZWJHTE9i
amVjdCogb2JqZWN0KQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkT2JqZWN0KFdl
YkdMT2JqZWN0KiBvYmplY3QpCiB7CisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOwogICAg
IHJlbW92ZU9iamVjdChvYmplY3QpOwogICAgIG1fY2FudmFzT2JqZWN0cy5hZGQob2JqZWN0KTsK
IH0KQEAgLTM0OTEsNiArMzY5OSw4IEBAIFdlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModW5zaWduZWQgbG9uZyB0CiAKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmSW1wbCh1bnNpZ25lZCBsb25nIGlu
ZGV4LCBpbnQgZXhwZWN0ZWRTaXplLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9h
dCB2MykKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAg
aWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewogICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzUyMyw2ICszNzMzLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZlcnRleEF0dHJpYmZJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBleHBlY3RlZFMK
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbCh1bnNpZ25l
ZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIGludCBleHBlY3RlZFNpemUpCiB7CisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghdikgewogICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzUzMiw2ICszNzQ0LDggQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbCh1bnNpZ25lZCBsb25nIGlu
ZGV4LCBGbG9hdDMyQXJyYXkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYmZ2SW1wbCh1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNpemUsIGludCBl
eHBlY3RlZFNpemUpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJu
OwogICAgIGlmICghdikgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggY2U2NmY2YTM0YTI4
YTExNzQ0NWUwYWNhODRiOTAzYzYxYTM3ZDJlMy4uMjRkMGY1ZTZjNjIxNWFmMmM4NjViYjg3ZWUy
MGJhYzlhYzY2MWI3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oCkBAIC0xNzYsNiArMTc2LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBoaW50KHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpOwogICAgIGJvb2wgaXNCdWZmZXIo
V2ViR0xCdWZmZXIqKTsKKyAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKICAgICBib29s
IGlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCk7CiAgICAgYm9vbCBpc0ZyYW1lYnVmZmVyKFdl
YkdMRnJhbWVidWZmZXIqKTsKICAgICBib29sIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKQEAg
LTI3Nyw2ICsyNzgsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKKyAgICB2
b2lkIGxvc2VDb250ZXh0KCk7CisgICAgdm9pZCByZXN0b3JlQ29udGV4dCgpOworCiAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0LmdldCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dC0+cGxhdGZvcm1MYXllcigpOyB9CkBAIC0yOTIsNiArMjk2LDcgQEAgcHVibGljOgogICAgIGZy
aWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKIAogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1M
Q2FudmFzRWxlbWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICB2b2lk
IGluaXRpYWxpemVOZXdDb250ZXh0KCk7CiAKICAgICB2b2lkIGFkZE9iamVjdChXZWJHTE9iamVj
dCopOwogICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwpAQCAtMzMzLDggKzMz
OCw2IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsK
ICAgICBib29sIG1fbmVlZHNVcGRhdGU7CiAgICAgYm9vbCBtX21hcmtlZENhbnZhc0RpcnR5Owot
ICAgIC8vIEZJWE1FOiBJIHRoaW5rIHRoaXMgaXMgYnJva2VuIC0tIGl0IGRvZXMgbm90IGluY3Jl
bWVudCBhbnkKLSAgICAvLyByZWZlcmVuY2UgY291bnRzLCBzbyBtYXkgcmVmZXIgdG8gZGVzdHJv
eWVkIG9iamVjdHMuCiAgICAgSGFzaFNldDxSZWZQdHI8V2ViR0xPYmplY3Q+ID4gbV9jYW52YXNP
YmplY3RzOwogCiAgICAgLy8gTGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBp
bmZvIGFib3V0IHNpemVzIGZvciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVM
RU1FTlRfQVJSQVlfQlVGRkVSCkBAIC00MjEsNiArNDI0LDcgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGxvbmcgbV9pbXBsZW1lbnRhdGlvbkNvbG9yUmVhZFR5cGU7CiAgICAgYm9vbCBtX3VucGFj
a0ZsaXBZOwogICAgIGJvb2wgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhOworICAgIGJvb2wgbV9j
b250ZXh0TG9zdDsKIAogICAgIC8vIEhlbHBlcnMgZm9yIGdldFBhcmFtZXRlciBhbmQgb3RoZXJz
CiAgICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJhbWV0ZXIodW5zaWduZWQgbG9uZyBwbmFt
ZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5pZGwgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKaW5k
ZXggZjc2NjQ2ZGE0YmZhZTZmOTBhY2MyODc3YmM0YjA0NDJmOTQyYmIzYy4uYzQ1ZTg4MDBiNzU2
YjE1NzFkYjgyMzg5Y2U0YjE3YTE0MzI2ZTQzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbApAQCAtNDYzLDYgKzQ2Myw3IEBAIG1vZHVsZSBodG1s
IHsKICAgICAgICAgLyogV2ViR0wtc3BlY2lmaWMgZW51bXMgKi8KICAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IFVOUEFDS19GTElQX1lfV0VCR0wgICAgICAgICAgICA9IDB4OTI0MDsKICAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCA9IDB4
OTI0MTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IENPTlRFWFRfTE9TVF9XRUJHTCAgICAg
ICAgICAgICA9IDB4OTI0MjsKIAogICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgYWN0aXZlVGV4dHVyZShpbiB1bnNpZ25lZCBsb25nIHRleHR1cmUpIHJhaXNlcyhET01F
eGNlcHRpb24pOwogICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYXR0
YWNoU2hhZGVyKGluIFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBpbiBXZWJHTFNoYWRlciBzaGFkZXIp
IHJhaXNlcyhET01FeGNlcHRpb24pOwpAQCAtNTUxLDE4ICs1NTIsMTggQEAgbW9kdWxlIGh0bWwg
ewogICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgZ2V0UGFyYW1ldGVy
KCk7CiAgICAgICAgIC8vIGFueSBnZXRQcm9ncmFtUGFyYW1ldGVyKGluIFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAg
ICAgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIGdldFByb2dyYW1QYXJhbWV0
ZXIoKTsKLSAgICAgICAgW1N0cmljdFR5cGVDaGVja2luZ10gRE9NU3RyaW5nIGdldFByb2dyYW1J
bmZvTG9nKGluIFdlYkdMUHJvZ3JhbSBwcm9ncmFtKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAg
ICAgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ29udmVydE51bGxTdHJpbmdUbz1OdWxsXSBET01T
dHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0pIHJhaXNlcyhE
T01FeGNlcHRpb24pOwogICAgICAgICAvLyBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGlu
IHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKICAgICAgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIGdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcigpOwogICAgICAgICAvLyBhbnkgZ2V0U2hhZGVyUGFyYW1l
dGVyKGluIFdlYkdMU2hhZGVyIHNoYWRlciwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSkgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9p
ZCBnZXRTaGFkZXJQYXJhbWV0ZXIoKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAotICAgICAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSBET01TdHJpbmcgICAgZ2V0U2hhZGVySW5mb0xvZyhpbiBXZWJH
TFNoYWRlciBzaGFkZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyAgICBnZXRTaGFk
ZXJJbmZvTG9nKGluIFdlYkdMU2hhZGVyIHNoYWRlcikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAK
ICAgICAgICAgLy8gVEJECiAgICAgICAgIC8vIHZvaWQgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQgKEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQqIHJhbmdl
LCBHTGludCogcHJlY2lzaW9uKTsKIAotICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBET01T
dHJpbmcgICAgZ2V0U2hhZGVyU291cmNlKGluIFdlYkdMU2hhZGVyIHNoYWRlcikgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CisgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIENvbnZlcnROdWxsU3Ry
aW5nVG89TnVsbF0gRE9NU3RyaW5nICAgIGdldFNoYWRlclNvdXJjZShpbiBXZWJHTFNoYWRlciBz
aGFkZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOwogCiAgICAgICAgIC8vIGFueSBnZXRUZXhQYXJh
bWV0ZXIoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpIHJh
aXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21d
IHZvaWQgZ2V0VGV4UGFyYW1ldGVyKCk7CkBAIC01NzksNiArNTgwLDcgQEAgbW9kdWxlIGh0bWwg
ewogCiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBoaW50KGluIHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIG1vZGUpOwogICAgICAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSBib29sZWFuICAgICAgaXNCdWZmZXIoaW4gV2ViR0xCdWZmZXIgYnVm
ZmVyKTsKKyAgICAgICAgW1N0cmljdFR5cGVDaGVja2luZ10gYm9vbGVhbiAgICAgIGlzQ29udGV4
dExvc3QoKTsKICAgICAgICAgW1N0cmljdFR5cGVDaGVja2luZ10gYm9vbGVhbiAgICAgIGlzRW5h
YmxlZChpbiB1bnNpZ25lZCBsb25nIGNhcCk7CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IGJvb2xlYW4gICAgICBpc0ZyYW1lYnVmZmVyKGluIFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZm
ZXIpOwogICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBib29sZWFuICAgICAgaXNQcm9ncmFt
KGluIFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAyMGI0ZTJkMTk3OGJmNzgyMDRhZmExOTc0MzVlYWVh
NTRjMjQzM2I3Li4wYjdkMzg4YjVkMTFjMTgxMWU4Y2QxMzVlODNlZDgxMmQ3MTk2ZmJjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC00MDEs
NiArNDAxLDcgQEAgcHVibGljOgogICAgICAgICAvLyBXZWJHTC1zcGVjaWZpYyBlbnVtcwogICAg
ICAgICBVTlBBQ0tfRkxJUF9ZX1dFQkdMID0gMHg5MjQwLAogICAgICAgICBVTlBBQ0tfUFJFTVVM
VElQTFlfQUxQSEFfV0VCR0wgPSAweDkyNDEsCisgICAgICAgIENPTlRFWFRfTE9TVF9XRUJHTCA9
IDB4OTI0MiwKIAogICAgICAgICAvLyBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKICAg
ICAgICAgQkdSQV9FWFQgPSAweDgwRTEsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72745</attachid>
            <date>2010-11-02 15:03:11 -0700</date>
            <delta_ts>2010-11-03 11:27:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35626-20101102150309.patch</filename>
            <type>text/plain</type>
            <size>91785</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDIzMjVkYzY2YjYwNmY0YTg0MDdjNzhiOWQyNjBhOWZhOGFkN2Y3MS4uNDlhOTJlYzliZTlmZWU1
MzY1MWRjZmViNTAyOTBkZWRlZGQ5MDQxZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjYgQEAKKzIwMTAtMTEtMDIgIEFk
cmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgbG9zdCwgcmVzdG9yZWQsIGFuZCBj
cmVhdGlvbiBmYWlsdXJlIGNvbnRleHQgZXZlbnRzIGZvcgorICAgICAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuICBUaGUgbG9zdCBhbmQgcmVzdG9yZWQgZnVuY3Rpb25zIGFyZSBub3QgaG9va2Vk
CisgICAgICAgIHVwIHlldCwgYnV0IHRoZSBjb250ZXh0IG5vdyBhY3RzIGFjY29yZGluZyB0byB0
aGUgc3BlYyBhcyBpdCBzaG91bGQKKyAgICAgICAgZHVyaW5nIGEgbG9zdCBjb250ZXh0LiAgVGVz
dGVkIG1hbnVhbGx5LCBhcyB0aGVyZSdzIG5vIHByb2dyYW1tYXRpYworICAgICAgICB3YXkgdG8g
bG9zZSBhIGNvbnRleHQgeWV0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzU2MjYKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnND
YWxsYmFjayk6CisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xDb250ZXh0RXZlbnQ6OldlYkdMQ29udGV4dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMQ29udGV4dEV2ZW50Ojp+V2ViR0xDb250ZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xDb250ZXh0RXZlbnQ6OmluaXRFdmVudCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0RXZlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRF
dmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEV2ZW50OjpzdGF0
dXNNZXNzYWdlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5pZGw6
IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVO
ZXdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWN0
aXZlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0
dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJp
bmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJpbmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyU3RlbmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmN1bGxGYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlU2hhZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoTWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZmluaXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2gpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRG
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVN
aXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3Rp
dmVBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRB
Y3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1Q
YXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQ
cm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3Nvcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcFNlcGFyYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRC
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyREltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTFmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisKIDIwMTAtMTAtMjggIERhbiBCZXJuc3Rl
aW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCBjN2RjZjE4MmU2NDdlNjM4OTg0YjdlMTc4YmY1Njg1YWE1ZjM1OWEzLi5mZThiNThhNjU5
ZTNmOTI5MjkxMGQ1MjA0YWY2N2M4MDBkMTRkMzA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjE1LDYgKzIxNSw3IEBACiAg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbCcsCiAgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZh
cy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0RXZlbnQuaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmlk
bCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaWRsJywKQEAg
LTE4NTQsNiArMTg1NSw4IEBACiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIu
aCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAn
LAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCcsCisg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwJywKKyAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5oJywKICAgICAgICAgICAgICdodG1s
L2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEdldElu
Zm8uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NmNmMDI2M2ExZWY2YTkwY2YwMTk3ZjQxYWU4NTk3NmZhYTQxZjJlYy4uMzdjN2IxZWU2YTA1YmE2
OTZlZDI1MGUwNjE2ZGIxNzZjYjUwNmNkYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTI4NjEsNiArMjg2MSw4IEBACiAJCTkzRjE5QjE1MDgyNDVFNTkw
MDFFOUFCQyAvKiBDb2NvYS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNUMyODY5NTAyODQ2RENEMDE4NjM1Q0EgLyogQ29jb2EuZnJh
bWV3b3JrICovOyB9OwogCQk5M0YxOUIxNjA4MjQ1RTU5MDAxRTlBQkMgLyogSmF2YVNjcmlwdENv
cmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjgyMTYyOTkwMjlGNEZCNTAxMDAwMTMxIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLzsgfTsKIAkJOTNGMTlCMTcwODI0NUU1OTAwMUU5QUJDIC8qIGxpYmljdWNvcmUuZHlsaWIg
aW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YxRDMx
QTA1NThDQzVDMDA4MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLzsgfTsKKwkJOTNGNkYxRUQx
MjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjZGMUVBMTI3RjcwQjEwMDU1Q0IwNiAv
KiBXZWJHTENvbnRleHRFdmVudC5jcHAgKi87IH07CisJCTkzRjZGMUVFMTI3RjcwQjEwMDU1Q0Iw
NiAvKiBXZWJHTENvbnRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNGNkYxRUIxMjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2
ZW50LmggKi87IH07CiAJCTkzRjkyNTQzMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9C
dXR0b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0Y5MjU0MTBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjkyNTQ0MEY3RUY1
QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjkyNTQyMEY3RUY1QjgwMDdFMzdDOSAvKiBD
aGVja2VkUmFkaW9CdXR0b25zLmNwcCAqLzsgfTsKIAkJOTNGOUI2NTcwQkEwRjM1RTAwODU0MDY0
IC8qIERPTUhUTUxDYW52YXNFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNGOUI2NTQwQkEwRjM1RTAwODU0MDY0IC8qIERPTUhUTUxDYW52
YXNFbGVtZW50Lm1tICovOyB9OwpAQCAtODkxOSw2ICs4OTIxLDkgQEAKIAkJOTNGMTlCMTkwODI0
NUU1OTAwMUU5QUJDIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRo
ID0gSW5mby5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CiAJCTkzRjE5QjFBMDgyNDVFNUEwMDFFOUFCQyAvKiBXZWJDb3JlLmZyYW1l
d29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3Jh
cHBlci5mcmFtZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYkNvcmUuZnJhbWV3
b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5M0YxRDMxQTA1NThD
QzVDMDA4MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0g
bGliaWN1Y29yZS5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmljdWNvcmUuZHlsaWI7IHNvdXJj
ZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CisJCTkzRjZGMUVBMTI3RjcwQjEwMDU1Q0IwNiAvKiBX
ZWJHTENvbnRleHRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBXZWJHTENvbnRleHRFdmVudC5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xDb250ZXh0RXZlbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0Y2RjFFQjEyN0Y3MEIxMDA1NUNC
MDYgLyogV2ViR0xDb250ZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV2ViR0xDb250ZXh0RXZlbnQuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRFdmVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0Y2RjFFQzEyN0Y3MEIxMDA1NUNCMDYg
LyogV2ViR0xDb250ZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMQ29u
dGV4dEV2ZW50LmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRFdmVudC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjhCMzA1MEEzMDBGRTEwMEY2MUFCOCAvKiBDb2Rl
R2VuZXJhdG9yLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9IENvZGVHZW5l
cmF0b3IucG07IHBhdGggPSBzY3JpcHRzL0NvZGVHZW5lcmF0b3IucG07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzRjhCMzA2MEEzMDBGRUEwMEY2MUFCOCAvKiBDb2RlR2VuZXJhdG9y
SlMucG0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gQ29kZUdlbmVyYXRvckpT
LnBtOyBwYXRoID0gLi4vc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHdyYXBzTGluZXMgPSAwOyB9OwogCQk5M0Y4QjMwNzBBMzAwRkVBMDBGNjFBQjgg
LyogZ2VuZXJhdGUtYmluZGluZ3MucGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1l
ID0gImdlbmVyYXRlLWJpbmRpbmdzLnBsIjsgcGF0aCA9ICJzY3JpcHRzL2dlbmVyYXRlLWJpbmRp
bmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTMzLDYgKzEyNTM4LDkg
QEAKIAkJCQk2RTRFOTFBOTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5jcHAgKi8sCiAJCQkJNkU0RTkxQUExMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXMuaCAqLywKIAkJCQk2RTRFOTFBQjEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5pZGwgKi8sCisJCQkJOTNGNkYxRUExMjdGNzBCMTAwNTVDQjA2IC8qIFdl
YkdMQ29udGV4dEV2ZW50LmNwcCAqLywKKwkJCQk5M0Y2RjFFQjEyN0Y3MEIxMDA1NUNCMDYgLyog
V2ViR0xDb250ZXh0RXZlbnQuaCAqLywKKwkJCQk5M0Y2RjFFQzEyN0Y3MEIxMDA1NUNCMDYgLyog
V2ViR0xDb250ZXh0RXZlbnQuaWRsICovLAogCQkJCTQ5QzdCOUFFMTA0MkQzMkUwMDA5RDQ0NyAv
KiBXZWJHTEZyYW1lYnVmZmVyLmNwcCAqLywKIAkJCQk0OUM3QjlBRjEwNDJEMzJFMDAwOUQ0NDcg
LyogV2ViR0xGcmFtZWJ1ZmZlci5oICovLAogCQkJCTQ5QzdCOUIwMTA0MkQzMkUwMDA5RDQ0NyAv
KiBXZWJHTEZyYW1lYnVmZmVyLmlkbCAqLywKQEAgLTIxMTg0LDYgKzIxMTkyLDcgQEAKIAkJCQkw
ODdCODQ5NjEyNzJDRUM4MDBBMTQ0MTcgLyogU1ZHQW5pbWF0ZWRBbmdsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDhDODU5QzAxMjc0NTc1NDAwQTU3MjhEIC8qIFNWR0FuaW1hdGVkUmVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzU4OTc4RUQxMjcwOTBENjAwNzZENUE5IC8qIFNwZWVjaElucHV0
UmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0Y2RjFFRTEyN0Y3MEIxMDA1NUNCMDYgLyog
V2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjM3NDAsNiArMjM3NDksNyBA
QAogCQkJCTdBMUYyQjUyMTI2QzYxQjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTEzRjAxRjExMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3Jh
Z2VNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3NTg5NzhFQzEyNzA5MEQ2MDA3NkQ1QTkgLyog
U3BlZWNoSW5wdXRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNGNkYxRUQxMjdGNzBC
MTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAppbmRleCA2NDNjZTY0OThlMThkNzAwZDBmNzMzMGE1OGY3YWQzNmIyYWQwNTNhLi5lNDE0Mjc4
ZDgxYjNiMDEzZWIzNDY2ZjAyYWE3MzIyODgwNGJhOWQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcApAQCAtMTcxLDE1
ICsxNzEsMTUgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4
ZWMpOwogICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IHRvV2ViR0xQcm9ncmFtKGV4ZWMtPmFy
Z3VtZW50KDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgVmVjdG9yPFdl
YkdMU2hhZGVyKj4gc2hhZGVyczsKICAgICBib29sIHN1Y2NlZWQgPSBjb250ZXh0LT5nZXRBdHRh
Y2hlZFNoYWRlcnMocHJvZ3JhbSwgc2hhZGVycywgZWMpOwogICAgIGlmIChlYykgewogICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KICAgICBpZiAoIXN1Y2NlZWQpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlp
IDwgc2hhZGVycy5zaXplKCk7ICsraWkpCiAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0KCksIHNoYWRlcnNbaWldKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKaW5k
ZXggOTM0NmEwNTQ3Yzg0MWY4ODQ2M2Y3MzZlNjViODI3MTA5ZmY0ZTY0YS4uYjIyNDBlZGMyY2Uw
ODRmOGMzYjY4YmE0MTQ3ZWNiYjk0Zjc4MTc1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcApA
QCAtMjM2LDEwICsyMzYsMTAgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnNDYWxsYmFjayhjb25zdAogICAgIGJvb2wgc3Vj
Y2VlZCA9IGNvbnRleHQtPmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7
CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7Ci0g
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB2ODo6TnVsbCgp
OwogICAgIH0KICAgICBpZiAoIXN1Y2NlZWQpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+
IGFycmF5ID0gdjg6OkFycmF5OjpOZXcoc2hhZGVycy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90
IGlpID0gMDsgaWkgPCBzaGFkZXJzLnNpemUoKTsgKytpaSkKICAgICAgICAgYXJyYXktPlNldCh2
ODo6SW50ZWdlcjo6TmV3KGlpKSwgdG9WOChzaGFkZXJzW2lpXSkpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vRXZlbnROYW1lcy5oIGIvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCmluZGV4IDY0
NDAwMDAxZTE2YWFmYjE1NTk2Yzc1MDUyMzc1ODE0MWYyMmFmZDguLmFlYWQyYmMxZDI4NDZjNWNi
MGZkNjg2ZjY0NjRmZGNkMDc3OTNmNTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0V2ZW50TmFt
ZXMuaAorKysgYi9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKQEAgLTE2OCw3ICsxNjgsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFwKICAgICBtYWNybyh3ZWJraXRmdWxsc2NyZWVuY2hh
bmdlKSBcCiAgICAgXAotICAgIG1hY3JvKHdlYmtpdHNwZWVjaGNoYW5nZSkKKyAgICBtYWNybyh3
ZWJraXRzcGVlY2hjaGFuZ2UpIFwKKyAgICBcCisgICAgbWFjcm8od2ViZ2xjb250ZXh0bG9zdCkg
XAorICAgIG1hY3JvKHdlYmdsY29udGV4dHJlc3RvcmVkKSBcCisgICAgbWFjcm8od2ViZ2xjb250
ZXh0Y3JlYXRpb25lcnJvcikgXAogICAgIFwKIC8vIGVuZCBvZiBET01fRVZFTlRfTkFNRVNfRk9S
X0VBQ0gKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVu
dC5jcHAgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iN2EyNzdmZTYwZTBhOTMyMjUyNzU5ZmYzNGM5NjQyMzI2NzdhZDNjCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5jcHAKQEAgLTAs
MCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHTENv
bnRleHRFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYkdMQ29udGV4dEV2ZW50
OjpXZWJHTENvbnRleHRFdmVudCgpCit7Cit9CisKK1dlYkdMQ29udGV4dEV2ZW50OjpXZWJHTENv
bnRleHRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29s
IGNhbmNlbGFibGUsIGNvbnN0IFN0cmluZyYgc3RhdHVzTWVzc2FnZSkKKyAgICA6IEV2ZW50KHR5
cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSkKKyAgICAsIG1fc3RhdHVzTWVzc2FnZShzdGF0dXNN
ZXNzYWdlKQoreworfQorCitXZWJHTENvbnRleHRFdmVudDo6fldlYkdMQ29udGV4dEV2ZW50KCkK
K3sKK30KKwordm9pZCBXZWJHTENvbnRleHRFdmVudDo6aW5pdEV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgU3RyaW5n
JiBzdGF0dXNNZXNzYWdlKQoreworICAgIGlmIChkaXNwYXRjaGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEV2ZW50Ojppbml0RXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlKTsK
KyAgICBtX3N0YXR1c01lc3NhZ2UgPSBzdGF0dXNNZXNzYWdlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2
ZW50LmggYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzQ4NzY5YjdlMjg4NjA0MmMxZGZmYzAzZmIzNWQ0ZjBlMDYwNjE1ZQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaApAQCAtMCwwICsx
LDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTENvbnRleHRFdmVudF9oCisjZGVmaW5lIFdlYkdM
Q29udGV4dEV2ZW50X2gKKworI2luY2x1ZGUgIkV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgV2ViR0xDb250ZXh0RXZlbnQgOiBwdWJsaWMgRXZlbnQgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEV2ZW50PiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTENvbnRleHRFdmVudCk7CisgICAgfQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEV2ZW50PiBjcmVhdGUoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBT
dHJpbmcmIHN0YXR1c01lc3NhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdlYkdMQ29udGV4dEV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgc3RhdHVzTWVz
c2FnZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5XZWJHTENvbnRleHRFdmVudCgpOworCisgICAg
dm9pZCBpbml0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwg
Ym9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJpbmcmIHN0YXR1c01lc3NhZ2UpOworCisgICAgY29u
c3QgU3RyaW5nJiBzdGF0dXNNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXNNZXNzYWdl
OyB9CisKK3ByaXZhdGU6CisgICAgV2ViR0xDb250ZXh0RXZlbnQoKTsKKyAgICBXZWJHTENvbnRl
eHRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNh
bmNlbGFibGUsIGNvbnN0IFN0cmluZyYgc3RhdHVzTWVzc2FnZSk7CisKKyAgICBTdHJpbmcgbV9z
dGF0dXNNZXNzYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
V2ViR0xDb250ZXh0RXZlbnRfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbnRleHRFdmVudC5pZGwgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50
LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zMDk3M2E5MGEzOThiYTg3MDdjNjA4ZTZhZGU0ODQyMmVkMmIzZjI5
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVu
dC5pZGwKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRlcmZh
Y2UgWworICAgICAgICBDb25kaXRpb25hbD0zRF9DQU5WQVMsCisgICAgXSBXZWJHTENvbnRleHRF
dmVudCA6IEV2ZW50IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBzdGF0
dXNNZXNzYWdlOworICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkIGluaXRFdmVudChp
biBET01TdHJpbmcgZXZlbnRUeXBlQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBET01TdHJpbmcgc3Rh
dHVzTWVzc2FnZUFyZyk7CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCBhNDVhYTFhNDFkZDZhNjBiNWFmOGVlM2NlNTRmM2Jk
OWI0OTg5OGIyLi40YzZmYjVjMTNlZDY5ZTU2MGNlNTBmNzIyODlhZTk2NGIzN2FjZWVjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysr
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC00OCw2
ICs0OCw3IEBACiAjaW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViR0xC
dWZmZXIuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAi
V2ViR0xDb250ZXh0RXZlbnQuaCIKICNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCiAjaW5j
bHVkZSAiV2ViR0xQcm9ncmFtLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIKQEAg
LTkwLDggKzkxLDEwIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVuCiAgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgZW1wdHlBdHRyaWJ1dGVzOwogICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJzID8gYXR0cnMt
PmF0dHJpYnV0ZXMoKSA6IGVtcHR5QXR0cmlidXRlcywgaG9zdFdpbmRvdykpOwogCi0gICAgaWYg
KCFjb250ZXh0KQorICAgIGlmICghY29udGV4dCkgeworICAgICAgICBjYW52YXMtPmRpc3BhdGNo
RXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0
Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxzZSwgdHJ1ZSwgIkNvdWxkIG5vdCBjcmVhdGUgYSBXZWJH
TCBjb250ZXh0LiIpKTsKICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgICAgICAKICAgICBy
ZXR1cm4gbmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQpOwogfQpAQCAt
OTksMTkgKzEwMiwzMiBAQCBQYXNzT3duUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoSFRNTENhbnZhc0VsZW1lbgogV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENh
bnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKICAgICA6IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQp
Ci0gICAgLCBtX25lZWRzVXBkYXRlKHRydWUpCi0gICAgLCBtX21hcmtlZENhbnZhc0RpcnR5KGZh
bHNlKQotICAgICwgbV9hY3RpdmVUZXh0dXJlVW5pdCgwKQogICAgICwgbV92aWRlb0NhY2hlKDQp
Ci0gICAgLCBtX3BhY2tBbGlnbm1lbnQoNCkKLSAgICAsIG1fdW5wYWNrQWxpZ25tZW50KDQpCi0g
ICAgLCBtX3VucGFja0ZsaXBZKGZhbHNlKQotICAgICwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
KGZhbHNlKQorICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9jb250
ZXh0KTsKKyAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQoreworICAgIG1fbmVlZHNVcGRhdGUg
PSB0cnVlOworICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKyAgICBtX2FjdGl2ZVRl
eHR1cmVVbml0ID0gMDsKKyAgICBtX3BhY2tBbGlnbm1lbnQgPSA0OworICAgIG1fdW5wYWNrQWxp
Z25tZW50ID0gNDsKKyAgICBtX3VucGFja0ZsaXBZID0gZmFsc2U7CisgICAgbV91bnBhY2tQcmVt
dWx0aXBseUFscGhhID0gZmFsc2U7CisgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gMDsKKyAgICBt
X2JvdW5kRWxlbWVudEFycmF5QnVmZmVyID0gMDsKKyAgICBtX2N1cnJlbnRQcm9ncmFtID0gMDsK
KyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7CisgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5n
ID0gMDsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlLmNsZWFyKCk7CiAKICAgICBpbnQgbnVtQ29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1D
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBtX3RleHR1cmVVbml0cy5jbGVhcigpOwog
ICAgIG1fdGV4dHVyZVVuaXRzLnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsK
IAogICAgIGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKQEAgLTE5OSw2ICsyMTUsOCBAQCBpbnQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaXplSW5CeXRlcyhpbnQgdHlwZSkKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7CiAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxMSw3ICsyMjksNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUsIEV4Y2VwdGlv
bkNvZGUmCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJv
Z3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdM
T2JqZWN0KHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXByb2dyYW0tPmF0dGFj
aFNoYWRlcihzaGFkZXIpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKQEAgLTIyNSw3ICsyNDMsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJp
bmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CkBAIC0yMzQsNiArMjUyLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGwKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBXZWJHTEJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAg
ICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICByZXR1cm47CkBAIC0yNjIsNiArMjgyLDggQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMQnVm
ZmVyKiBidWZmZXIKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVidWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvbnRleHQo
KSAhPSB0aGlzKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgw
LDYgKzMwMiw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVidWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5k
ZXJidWZmZXIqIHJlbmRlckJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAg
ICAgaWYgKHJlbmRlckJ1ZmZlciAmJiByZW5kZXJCdWZmZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7
CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjk3LDYgKzMyMSw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymlu
ZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+
Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47
CkBAIC0zMzAsMTMgKzM1NiwxNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRl
eHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dAogCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4s
IGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+YmxlbmRDb2xvcihyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9uZyBt
b2RlKQogewotICAgIGlmICghdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGUpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlKSkKICAgICAgICAg
cmV0dXJuOwogICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMzQ0LDcgKzM3Miw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSkKIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1bnNpZ25lZCBs
b25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9kZUFscGhhKQogewotICAgIGlmICghdmFsaWRh
dGVCbGVuZEVxdWF0aW9uKG1vZGVSR0IpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24obW9kZUFs
cGhhKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24o
bW9kZVJHQikgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlQWxwaGEpKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9k
ZUFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMzUzLDEy
ICszODEsMTYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBh
cmF0ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmUKIAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcg
ZGZhY3RvcikKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAg
ICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0gICAgICAgCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpibGVuZEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIHNyY1JHQiwgdW5zaWduZWQg
bG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3JjQWxwaGEsIHVuc2lnbmVkIGxvbmcgZHN0QWxw
aGEpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1f
Y29udGV4dC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RB
bHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTM2Niw2
ICszOTgsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUo
dW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbgogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25l
ZCBsb25nIHVzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBXZWJHTEJ1
ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQsIHVzYWdl
KTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpAQCAtMzgzLDYgKzQxNyw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZm
ZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgdW5zaWduZWQg
bG9uZyB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgV2ViR0xCdWZm
ZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFyZ2V0LCB1c2FnZSk7
CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTQwMCw2ICs0MzYsOCBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgQXJyYXlCdWZmZXIqIGRhdGEsCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVy
RGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCB1bnNpZ25l
ZCBsb25nIHVzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBXZWJHTEJ1
ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQsIHVzYWdl
KTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpAQCAtNDE3LDYgKzQ1NSw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVm
ZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVy
KiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBXZWJHTEJ1ZmZlciog
YnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEFUSUNfRFJBVyk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsK
QEAgLTQzNCw2ICs0NzQsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3Vi
RGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIEFycgogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcg
b2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0
ZXJzKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKICAgICBpZiAoIWJ1
ZmZlcikKICAgICAgICAgcmV0dXJuOwpAQCAtNDUwLDYgKzQ5Miw4IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9m
ZnNldCwgQXJyCiAKIHVuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQogeworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQ7CiAgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NjIsNiArNTA2
LDggQEAgdW5zaWduZWQgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQorICAgICAgICByZXR1cm47CiAgICAgaWYgKG1hc2sgJiB+KEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewogICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDcyLDYgKzUxOCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjbGVhcih1bnNpZ25lZCBsb25nIG1hc2spCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjbGVhckNvbG9yKGRvdWJsZSByLCBkb3VibGUgZywgZG91YmxlIGIsIGRvdWJsZSBh
KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAo
aXNuYW4ocikpCiAgICAgICAgIHIgPSAwOwogICAgIGlmIChpc25hbihnKSkKQEAgLTQ4NiwxOCAr
NTM0LDI0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckNvbG9yKGRvdWJsZSBy
LCBkb3VibGUgZywgZG91YmxlIGIsIGRvdWJsZSBhKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXJEZXB0aChkb3VibGUgZGVwdGgpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChkZXB0aCk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNsZWFyU3RlbmNpbChsb25nIHMpCiB7CisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwg
Ym9vbCBhbHBoYSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47
CiAgICAgbV9jb250ZXh0LT5jb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC01MDUsNyArNTU5LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVl
biwgYm9vbCBibHVlLCBib29sIGFscGgKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21w
aWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIp
KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG9iamVjdE9y
WmVybyhzaGFkZXIpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAt
NTEzLDYgKzU2Nyw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGVy
KFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjCiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBs
ZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikKIHsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2YWxpZGF0
ZVRleEZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSkpCiAgICAgICAgIHJldHVybjsKICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlk
YXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0LCB0cnVlKTsKQEAgLTU0MCw2ICs1OTYsOCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgbGV2ZWwsIHVucwogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRl
eFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNl
dCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAg
cmV0dXJuOwogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0
YXJnZXQsIHRydWUpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CkBAIC01NTcsNiAr
NjE1LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLAogCiBQYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCiB7CisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBv
ID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKICAgICBhZGRPYmplY3Qoby5nZXQoKSk7CiAg
ICAgcmV0dXJuIG87CkBAIC01NjQsNiArNjI0LDggQEAgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQogICAgICAgICAKIFBhc3NSZWZQ
dHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGcmFtZWJ1
ZmZlcigpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUo
dGhpcyk7CiAgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJldHVybiBvOwpAQCAtNTcxLDYg
KzYzMyw4IEBAIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiAKIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQogeworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBX
ZWJHTFRleHR1cmU6OmNyZWF0ZSh0aGlzKTsKICAgICBhZGRPYmplY3Qoby5nZXQoKSk7CiAgICAg
cmV0dXJuIG87CkBAIC01NzgsNiArNjQyLDggQEAgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCiAKIFBhc3NSZWZQdHI8V2ViR0xQ
cm9ncmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVByb2dyYW0oKQogeworICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJHTFBy
b2dyYW0+IG8gPSBXZWJHTFByb2dyYW06OmNyZWF0ZSh0aGlzKTsKICAgICBhZGRPYmplY3Qoby5n
ZXQoKSk7CiAgICAgcmV0dXJuIG87CkBAIC01ODUsNiArNjUxLDggQEAgUGFzc1JlZlB0cjxXZWJH
TFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCiAKIFBhc3NS
ZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4g
MDsKICAgICBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6
Y3JlYXRlKHRoaXMpOwogICAgIGFkZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsKQEAg
LTU5Myw2ICs2NjEsOCBAQCBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiBQYXNzUmVmUHRyPFdlYkdMU2hhZGVy
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBR01FTlRfU0hBREVSKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJldHVybiAwOwpAQCAt
NjA1LDEzICs2NzUsMTUgQEAgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyB0eXBlLAogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQogeworICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmN1bGxGYWNl
KG1vZGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikK
IHsKLSAgICBpZiAoIWJ1ZmZlcikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFidWZmZXIp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBidWZmZXItPmRlbGV0ZU9iamVjdCgpOwpAQCAt
NjMzLDcgKzcwNSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIo
V2ViR0xCdWZmZXIqIGJ1ZmZlcikKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQogewotICAgIGlmICgh
ZnJhbWVidWZmZXIpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhZnJhbWVidWZmZXIpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRp
bmcpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwpAQCAtNjQ1LDcgKzcxNyw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZy
YW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIGlmICghcHJvZ3JhbSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFwcm9ncmFtKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
QEAgLTY1OCw3ICs3MzAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUHJv
Z3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKIHsK
LSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFyZW5k
ZXJidWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAocmVuZGVyYnVmZmVyID09IG1fcmVu
ZGVyYnVmZmVyQmluZGluZykKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gMDsKQEAg
LTY2OSw3ICs3NDEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUmVuZGVy
YnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKIHsKLSAgICBp
ZiAoIXNoYWRlcikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFzaGFkZXIpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBzaGFkZXItPmRlbGV0ZU9iamVjdCgpOwpAQCAtNjc3LDcgKzc0
OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVTaGFkZXIoV2ViR0xTaGFk
ZXIqIHNoYWRlcikKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUo
V2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIGlmICghdGV4dHVyZSkKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF0ZXh0dXJlKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgdGV4
dHVyZS0+ZGVsZXRlT2JqZWN0KCk7CkBAIC02ODcsMTggKzc1OSwyNCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCiAKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKQog
eworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRl
eHQtPmRlcHRoRnVuYyhmdW5jKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhNYXNrKGJvb2wgZmxhZykK
IHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250
ZXh0LT5kZXB0aE1hc2soZmxhZyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoUmFuZ2UoZG91YmxlIHpO
ZWFyLCBkb3VibGUgekZhcikKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtNzA2LDcgKzc4NCw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpG
YXIpCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3Jh
bSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXByb2dyYW0tPmRldGFjaFNo
YWRlcihzaGFkZXIpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKQEAgLTcyMCw3ICs3OTgsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgV2ViR0xTaGFkZXIqIHNoYQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlz
YWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKIHsKLSAgICBpZiAoIXZhbGlkYXRlQ2FwYWJpbGl0eShj
YXApKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXAp
KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTcyOSw2ICs4MDcsOCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9u
ZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGluZGV4ID49
IG1fbWF4VmVydGV4QXR0cmlicykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtOTI1LDcgKzEwMDUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5
cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bgogewogICAgIFVOVVNF
RF9QQVJBTShlYyk7CiAKLSAgICBpZiAoIXZhbGlkYXRlRHJhd01vZGUobW9kZSkpCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShtb2RlKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKGZpcnN0IDwgMCB8fCBjb3VudCA8IDApIHsKQEAgLTk2Niw3ICsxMDQ2
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBs
b25nIG1vZGUsIGxvbmcgY291bnQsIHVuc2lnbmUKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwog
Ci0gICAgaWYgKCF2YWxpZGF0ZURyYXdNb2RlKG1vZGUpKQorICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlRHJhd01vZGUobW9kZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHN3
aXRjaCAodHlwZSkgewpAQCAtMTAyMyw3ICsxMTAzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgY291bnQsIHVuc2ln
bmUKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZSh1bnNpZ25lZCBsb25nIGNh
cCkKIHsKLSAgICBpZiAoIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQorICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwpAQCAtMTAzMiw2ICsxMTEyLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmVuYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpl
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7
CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC0xMDQ4LDYgKzExMzAsOCBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWdu
ZWQgbG9uZyBpbmRleCwgRXhjZXB0aQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmlu
aXNoKCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAg
bV9jb250ZXh0LT5maW5pc2goKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7
CiB9CkBAIC0xMDU1LDYgKzExMzksOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmlu
aXNoKCkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZsdXNoKCkKIHsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5mbHVzaCgp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KQEAgLTEwNjIsNyArMTE0
OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgpCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0
YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1Bh
cmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmIChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwpAQCAtMTExNCw3ICsxMjAw
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ24KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0
dXJlLCBsb25nIGxldmVsLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmICghdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwg
YXR0YWNobWVudCkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1
ZmZlckZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgYXR0YWNobWVudCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAobGV2ZWwpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CkBAIC0xMTM4LDEyICsxMjI0LDE2IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZy
b250RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1vZGUpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkKIHsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgZmFsc2UpOwogICAgIGlmICghdGV4KQog
ICAgICAgICByZXR1cm47CkBAIC0xMTcyLDkgKzEyNjIsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCiBQYXNzUmVmUHRy
PFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIo
V2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIDA7
CisgICAgQWN0aXZlSW5mbyBpbmZvOwogICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRy
aWIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCiAgICAgICAgIHJldHVybiAw
OwogICAgIHJldHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlw
ZSwgaW5mby5zaXplKTsKQEAgLTExODMsOSArMTI3Myw5IEBAIFBhc3NSZWZQdHI8V2ViR0xBY3Rp
dmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dy
YW0qCiBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBBY3Rp
dmVJbmZvIGluZm87Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAg
ICAgICAgIHJldHVybiAwOworICAgIEFjdGl2ZUluZm8gaW5mbzsKICAgICBpZiAoIW1fY29udGV4
dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCkBAIC0xMTk4
LDcgKzEyODgsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFk
ZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVjdG9yPFdlYgogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7CiAgICAgc2hhZGVyT2JqZWN0cy5jbGVhcigpOwotICAgIGlmICghdmFsaWRhdGVXZWJH
TE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW50IG51bVNo
YWRlcnMgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9n
cmFtKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFUVEFDSEVEX1NIQURFUlMsICZudW1TaGFkZXJzKTsK
QEAgLTEyMjMsMTIgKzEzMTMsMTYgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0
dGFjaGVkU2hhZGVycyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIFZlY3RvcjxXZWIKIAogaW50IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAg
ICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9u
KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CiB9CiAKIFdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7CiAgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVG
RkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIp
IHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwpAQCAtMTI0
OSw2ICsxMzQzLDggQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVm
ZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnMKIAogUGFzc1JlZlB0cjxXZWJH
TENvbnRleHRBdHRyaWJ1dGVzPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldENvbnRleHRBdHRy
aWJ1dGVzKCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gMDsK
ICAgICAvLyBXZSBhbHdheXMgbmVlZCB0byByZXR1cm4gYSBuZXcgV2ViR0xDb250ZXh0QXR0cmli
dXRlcyBvYmplY3QgdG8KICAgICAvLyBwcmV2ZW50IHRoZSB1c2VyIGZyb20gbXV0YXRpbmcgYW55
IGNhY2hlZCB2ZXJzaW9uLgogICAgIHJldHVybiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpjcmVh
dGUobV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpKTsKQEAgLTEyNjIsNyArMTM1OCw3
IEBAIHVuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCiBXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwg
dW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyh0YXJn
ZXQsIGF0dGFjaG1lbnQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRnJh
bWVidWZmZXJGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGF0dGFjaG1lbnQpKQogICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgc3dpdGNoIChwbmFtZSkgewogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CkBAIC0xMzEw
LDYgKzE0MDYsOCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodW5zaWduZWQgbAogV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIFdlYkdMU3RhdGVS
ZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgc3dpdGNoIChwbmFtZSkgewogICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFDVElWRV9URVhUVVJFOgpAQCAtMTUwMSw3ICsxNTk5LDcgQEAgV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKHVuc2lnbmVkIGxv
bmcgcG5hbWUsIEV4Y2VwdGlvbkMKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25n
IHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CiAKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwpAQCAt
MTUzMCw4ICsxNjI4LDggQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHUKIFN0cmluZyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZh
bGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiAiIjsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsK
ICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRQcm9ncmFtSW5mb0xvZyhvYmplY3RPclplcm8ocHJv
Z3JhbSkpOwogfQpAQCAtMTUzOSw2ICsxNjM3LDggQEAgU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb24K
IFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKQEAgLTE1NzIsNyArMTY3Miw3IEBAIFdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih1bnNpZ25l
ZCBsb25nIHRhcmdlCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFk
ZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlk
YXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
ICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIGludCB2YWx1ZSA9IDA7
CkBAIC0xNTk3LDggKzE2OTcsOCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgdW5zaQogU3RyaW5nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciogc2hhZGVy
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICgh
dmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQotICAgICAgICByZXR1cm4gIiI7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsK
ICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG9iamVjdE9yWmVybyhzaGFk
ZXIpKTsKIH0KQEAgLTE2MDYsOCArMTcwNiw4IEBAIFN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kCiBT
dHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIq
IHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIiOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBm
YWxzZSk7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U2hhZGVyU291cmNlKG9iamVjdE9yWmVy
byhzaGFkZXIpKTsKIH0KQEAgLTE2MTUsNiArMTcxNSw4IEBAIFN0cmluZyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25D
b2RlCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0g
dmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIGZhbHNlKTsKICAgICBpZiAoIXRleCkKICAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwpAQCAtMTYzNiw3ICsxNzM4LDcgQEAgV2ViR0xH
ZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ24KIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgaWYgKCF1bmlmb3JtTG9jYXRpb24pIHsKICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CkBAIC0xNzgwLDcgKzE4ODIsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2Vi
RwogUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgbG9uZyB1bmlmb3JtTG9j
YXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3Jh
bSksIG5hbWUpOwpAQCAtMTc5Miw2ICsxODk0LDggQEAgUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1M
b2NhdGlvbj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0wK
IFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYih1bnNp
Z25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywg
ZmFsc2UpOwogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CkBAIC0xODM5LDYgKzE5NDMsOCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZQogCiBs
b25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVk
IGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7CisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgbG9uZyByZXN1bHQgPSBtX2NvbnRleHQtPmdl
dFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE4NDYsNiArMTk1Miw4IEBA
IGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWdu
ZWQgbG9uZyBpbmRleCwgdW5zaWduZWQKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omhp
bnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKHRhcmdldCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQpIHsKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTg1NiwyMiArMTk2NCwyNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKQog
CiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZl
cikKIHsKLSAgICBpZiAoIWJ1ZmZlcikKKyAgICBpZiAoIWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBtX2NvbnRleHQtPmlzQnVm
ZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOwogfQogCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
aXNDb250ZXh0TG9zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dExvc3Q7Cit9CisK
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXAp
CiB7Ci0gICAgaWYgKCF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKKyAgICBpZiAoIXZhbGlkYXRl
Q2FwYWJpbGl0eShjYXApIHx8IGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxlZChjYXApOwogfQogCiBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6aXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1
ZmZlcikKIHsKLSAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgIGlmICghZnJhbWVidWZmZXIgfHwg
aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gbV9j
b250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyLT5vYmplY3QoKSk7CkBAIC0xODc5LDcg
KzE5OTIsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNGcmFtZWJ1ZmZlcihXZWJH
TEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCiB7Ci0gICAgaWYgKCFwcm9ncmFtKQor
ICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJvZ3JhbShwcm9ncmFtLT5vYmplY3QoKSk7
CkBAIC0xODg3LDcgKzIwMDAsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNQcm9n
cmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiB7Ci0gICAg
aWYgKCFyZW5kZXJidWZmZXIpCisgICAgaWYgKCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0TG9z
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gbV9jb250ZXh0LT5pc1Jl
bmRlcmJ1ZmZlcihyZW5kZXJidWZmZXItPm9iamVjdCgpKTsKQEAgLTE4OTUsNyArMjAwOCw3IEBA
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1
ZmZlciogcmVuZGVyYnVmZmVyKQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFk
ZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKIHsKLSAgICBpZiAoIXNoYWRlcikKKyAgICBpZiAoIXNo
YWRlciB8fCBpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlci0+b2JqZWN0KCkpOwpAQCAtMTkwMyw3ICsy
MDE2LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVy
KiBzaGFkZXIpCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleHR1cmUoV2ViR0xU
ZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIGlmICghdGV4dHVyZSkKKyAgICBpZiAoIXRleHR1cmUg
fHwgaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
bV9jb250ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkpOwpAQCAtMTkxMSw2ICsyMDI0
LDggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUq
IHRleHR1cmUpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5lV2lkdGgoZG91Ymxl
IHdpZHRoKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAg
ICBtX2NvbnRleHQtPmxpbmVXaWR0aCgoZmxvYXQpIHdpZHRoKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMTkxOCw3ICsyMDMzLDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmxpbmVXaWR0aChkb3VibGUgd2lkdGgpCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJH
TE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkpIHsKICAgICAgICAgaWYgKCFwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUikgfHwgIXByb2dyYW0tPmdldEF0dGFjaGVkU2hh
ZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpKSB7CkBAIC0xOTM4LDYgKzIw
NTMsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0oV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYwogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkKIHsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChwbmFt
ZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19GTElQX1lfV0VCR0w6CiAg
ICAgICAgIG1fdW5wYWNrRmxpcFkgPSBwYXJhbTsKQEAgLTE5NjQsMTIgKzIwODEsMTYgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGxvbmcgcGFyYW0pCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpwb2x5Z29uT2Zmc2V0
KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cykKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5wb2x5Z29uT2Zmc2V0KChmbG9hdCkg
ZmFjdG9yLCAoZmxvYXQpIHVuaXRzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhsb25nIHgs
IGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1
bnNpZ25lZCBsb25nIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFjYW52YXMoKS0+b3JpZ2luQ2xlYW4oKSkgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VS
UjsKICAgICAgICAgcmV0dXJuOwpAQCAtMjAzNywxMiArMjE1OCwxNiBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9u
ZyBoZWlnaHQsCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAg
ICBtX2NvbnRleHQtPnJlbGVhc2VTaGFkZXJDb21waWxlcigpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5k
ZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGludGVy
bmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChp
bnRlcm5hbGZvcm1hdCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBP
TkVOVDE2OgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgpAQCAtMjA2NSwxMiAr
MjE5MCwxNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFn
ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbAogCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2FtcGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCkKIHsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5z
YW1wbGVDb3ZlcmFnZSgoZmxvYXQpIHZhbHVlLCBpbnZlcnQpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lz
c29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAg
bV9jb250ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yMDc4LDcgKzIyMDcsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6c2Npc3Nvcihsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZShX
ZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmpl
Y3Qoc2hhZGVyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJj
ZShvYmplY3RPclplcm8oc2hhZGVyKSwgc3RyaW5nKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwpAQCAtMjA4NiwzNiArMjIxNSw0OCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYg
c3RyaQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmModW5zaWduZWQg
bG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQogeworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5j
KGZ1bmMsIHJlZiwgbWFzayk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jU2VwYXJhdGUodW5z
aWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBs
b25nIG1hc2spCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwog
ICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2sp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spCiB7CisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+c3Rl
bmNpbE1hc2sobWFzayk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWdu
ZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spCiB7CisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0
ZShmYWNlLCBtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE9wKHVuc2lnbmVkIGxvbmcgZmFp
bCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKIHsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5zdGVuY2ls
T3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE9wU2VwYXJhdGUo
dW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZh
aWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFp
bCwgemZhaWwsIHpwYXNzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQpAQCAtMjE2Nyw3ICsyMzA4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBw
aXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRGF0
YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscykpCisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIHBpeGVscykpCiAgICAgICAgIHJldHVybjsKICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8g
cGl4ZWxzLT5iYXNlQWRkcmVzcygpIDogMDsKICAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7
CkBAIC0yMTk0LDYgKzIzMzUsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0
eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAw
OworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8
dWludDhfdD4gZGF0YTsKICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhl
bHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
LCBkYXRhKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKQEAgLTIyMTEsNiArMjM1NCw4IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
bGV2ZWwsIHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFn
ZSgpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC0yMjI0LDYgKzIzNjks
OCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghY2FudmFzIHx8ICFj
YW52YXMtPmJ1ZmZlcigpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC0y
MjU2LDYgKzI0MDMsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1
bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBI
VE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAw
OworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8pOwogICAgIGlmICghdmlkZW8p
CiAgICAgICAgIHJldHVybjsKQEAgLTIyNjQsNiArMjQxMyw4IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVu
c2lnbmVkCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXIodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0IHBhcmFtZiwgaW50IHBh
cmFtaSwgYm9vbCBpc0Zsb2F0KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybjsKICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmco
dGFyZ2V0LCBmYWxzZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKQEAgLTIzMDks
NiArMjQ2MCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFz
ZSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1CiB7CiAgICAgLy8gRklYTUU6IEZv
ciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghdmFsaWRhdGVUZXhG
dW5jRm9ybWF0QW5kVHlwZShmb3JtYXQsIHR5cGUpKQogICAgICAgICByZXR1cm47CiAgICAgaWYg
KCF2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgdHJ1ZSkpCkBAIC0yMzIyLDYgKzI0NzUs
OCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRh
OwogICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKGltYWdlLCBmb3JtYXQsIHR5
cGUsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewogICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKQEAg
LTIzMzUsNyArMjQ5MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFn
ZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Zm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNEYXRhKHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxp
ZGF0ZVRleEZ1bmNEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBwaXhlbHMtPmJhc2VBZGRy
ZXNzKCkgOiAwOwogICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKQEAgLTIzNjEsNiArMjUx
Niw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEltYWdlRGF0
YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRh
OwogICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0
eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CiAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpOwpAQCAtMjM3NCw2ICsyNTMxLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZv
cm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsKICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKQEAgLTIzODcsNiArMjU0Niw4IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5z
aWduZWQgbGV2ZWwsIHVuc2lnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBj
YW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+
YnVmZmVyKCkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0MDAsNiAr
MjU2MSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxW
aWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbyk7CiAgICAgaWYgKCF2aWRlbykKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjQwOSw3ICsyNTcyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWcKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhbG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlv
bi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTI0MjQsNyArMjU4Nyw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJh
eSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDEpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYs
IDEpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOwpAQCAtMjQzNCw3ICsyNTk3
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQq
IHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwg
MSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cyhsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4
dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSk7CkBAIC0yNDQ0LDcg
KzI2MDcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsbwogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGlu
dCB4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
ICghbG9jYXRpb24pCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhbG9jYXRpb24pCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKQEAgLTI0NTksNyArMjYyMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMo
bG9jYXRpb24sIHYsIDEpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDEpKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+
bGVuZ3RoKCkpOwpAQCAtMjQ2OSw3ICsyNjMyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDEpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDEpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYsIHNpemUpOwpAQCAtMjQ3OSw3ICsyNjQyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBp
bnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhbG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTI0OTQsNyAr
MjY1Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZs
b2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDIpKQor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9j
YXRpb24sIHYsIDIpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0y
ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKQEAg
LTI1MDQsNyArMjY2Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRp
b24sIHYsIHNpemUsIDIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDIpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUg
LyAyKTsKQEAgLTI1MTQsNyArMjY3Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSB8fCAhbG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+
cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTI1MjksNyArMjY5Miw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBpbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
Mml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDIpKQorICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDIpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKQEAgLTI1MzksNyArMjcwMiw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwg
aW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAyKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxv
Y2F0aW9uLCB2LCBzaXplLCAyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51
bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMik7CkBAIC0yNTQ5LDcg
KzI3MTIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludAogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
IHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtMjU2NCw3ICsyNzI3LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGZsb2EKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMykpCisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMykpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwpAQCAtMjU3NCw3ICsyNzM3LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYs
IGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMykp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhs
b2NhdGlvbiwgdiwgc2l6ZSwgMykpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+
dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDMpOwpAQCAtMjU4NCw3
ICsyNzQ3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG8KIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBp
bnQgeCwgaW50IHksIGludCB6LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
bG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTI1OTksNyArMjc2Miw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBpbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDMpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDMpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKQEAgLTI2MDksNyArMjc3Miw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgSW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2
LCBzaXplLCAzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMyk7CkBAIC0yNjE5LDcgKzI3ODIsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIGludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHosIGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
IHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtMjYzNCw3ICsyNzk3LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGZsb2EKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwpAQCAtMjY0NCw3ICsyODA3LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYs
IGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgNCkp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhs
b2NhdGlvbiwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+
dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDQpOwpAQCAtMjY1NCw3
ICsyODE3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG8KIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBp
bnQgeCwgaW50IHksIGludCB6LCBpbnQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIWxvY2F0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnBy
b2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNjY5LDcgKzI4MzIsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgaW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCA0KSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCA0KSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CkBAIC0yNjc5LDcgKzI4NDIsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGlu
dCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCisg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2Nh
dGlvbiwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5p
Zm9ybTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDQpOwpAQCAtMjY4OSw3ICsy
ODUyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNw
b3NlLCB2LCA0KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0
aCgpIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTI2OTgs
NyArMjg2MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1N
YXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQorICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9j
YXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2Nv
bnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwg
diwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0y
NzA3LDcgKzI4NzAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJp
eDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpbwogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3Jt
TWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA5KSkKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYsIDkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCkgLyA5KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpA
QCAtMjcxNiw3ICsyODc5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1N
YXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW8KIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRl
VW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgOSkp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA5KSkKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJh
bnNwb3NlLCB2LCBzaXplIC8gOSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKQEAgLTI3MjUsNyArMjg4OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDE2KSkKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJz
KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDE2KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2
LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMTYpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CkBAIC0yNzM0LDcgKzI4OTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpbwog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHYsIGludCBz
aXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
ICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2
LCBzaXplLCAxNikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
TWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDE2KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwpAQCAtMjc0Myw2ICsyOTA2LDggQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKHByb2dy
YW0gJiYgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICByZXR1cm47CkBAIC0yNzY2LDcgKzI5MzEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUm
IGVjKQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX2NvbnRleHQtPnZhbGlkYXRlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3Jh
bSkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0yODM1LDYgKzMw
MDAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KHVuc2ln
bmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2LCBpbnQgcwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmRleCwgbG9uZyBzaXplLCB1
bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwgbG9uZyBzdHJpZGUsIGxvbmcgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC0y
ODc5LDYgKzMwNDYsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
UG9pbnRlcih1bnNpZ25lZCBsb25nIGluZGV4LCBsb25nIHNpemUsCiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0
aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIGlmIChpc25hbih4KSkKICAgICAgICAgeCA9IDA7CiAgICAgaWYg
KGlzbmFuKHkpKQpAQCAtMjg5MSw2ICszMDYwLDQ0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0KCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKworICAgIGRl
dGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKworICAgIC8vIFRoZXJlIGlzIG5vIGRpcmVjdCB3
YXkgdG8gY2xlYXIgZXJyb3JzIGZyb20gYSBHTCBpbXBsZW1lbnRhdGlvbiBhbmQKKyAgICAvLyBs
b29waW5nIHVudGlsIGdldEVycm9yKCkgYmVjb21lcyBOT19FUlJPUiBtaWdodCBjYXVzZSBhbiBp
bmZpbml0ZSBsb29wIGlmCisgICAgLy8gdGhlIGRyaXZlciBvciBjb250ZXh0IGltcGxlbWVudGF0
aW9uIGhhZCBhIGJ1Zy4gIFNvLCBsb29wIGEgcmVhc29uYWJseQorICAgIC8vIGxhcmdlIG51bWJl
ciBvZiB0aW1lcyB0byBjbGVhciBhbnkgZXhpc3RpbmcgZXJyb3JzLgorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6Q09O
VEVYVF9MT1NUX1dFQkdMKTsKKworICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29u
dGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGxvc3RFdmVudCwgZmFs
c2UsIHRydWUsICIiKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3Jl
Q29udGV4dCgpCit7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhlcmUg
aXMgbm8gaGFuZGxlciBmb3IKKyAgICAvLyB0aGUgY29udGV4dCByZXN0b3JlZCBldmVudC4KKyAg
ICBpZiAoIWNhbnZhcygpLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkud2ViZ2xjb250
ZXh0cmVzdG9yZWRFdmVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dExvc3Qg
PSBmYWxzZTsKKyAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOworCisgICAgY2FudmFzKCktPmRp
c3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xj
b250ZXh0cmVzdG9yZWRFdmVudCwgZmFsc2UsIHRydWUsICIiKSk7Cit9CisKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKIHsKICAg
ICBtX2NhbnZhc09iamVjdHMucmVtb3ZlKG9iamVjdCk7CkBAIC0yODk4LDYgKzMxMDUsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmpl
Y3QpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRPYmplY3QoV2ViR0xPYmplY3Qq
IG9iamVjdCkKIHsKKyAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CiAgICAgcmVtb3ZlT2Jq
ZWN0KG9iamVjdCk7CiAgICAgbV9jYW52YXNPYmplY3RzLmFkZChvYmplY3QpOwogfQpAQCAtMzQ5
MSw2ICszNjk5LDggQEAgV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVCdWZmZXJEYXRhUGFyYW1ldGVycyh1bnNpZ25lZCBsb25nIHQKIAogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBl
eHBlY3RlZFNpemUsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQogewor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXgg
Pj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47
CkBAIC0zNTIzLDYgKzM3MzMsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliZkltcGwodW5zaWduZWQgbG9uZyBpbmRleCwgaW50IGV4cGVjdGVkUwogCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIEZsb2F0MzJBcnJheSogdiwgaW50IGV4cGVjdGVkU2l6ZSkKIHsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2KSB7CiAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OwogICAgICAgICByZXR1cm47CkBAIC0zNTMyLDYgKzM3NDQsOCBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0
MzJBcnJheQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBs
KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgaW50IGV4cGVjdGVkU2l6
ZSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYg
KCF2KSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCBjZTY2ZjZhMzRhMjhhMTE3NDQ1ZTBh
Y2E4NGI5MDNjNjFhMzdkMmUzLi4yNGQwZjVlNmM2MjE1YWYyYzg2NWJiODdlZTIwYmFjOWFjNjYx
YjcyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAg
LTE3Niw2ICsxNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhpbnQodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9kZSk7CiAgICAgYm9vbCBpc0J1ZmZlcihXZWJHTEJ1ZmZl
ciopOworICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbmFibGVk
KHVuc2lnbmVkIGxvbmcgY2FwKTsKICAgICBib29sIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1
ZmZlciopOwogICAgIGJvb2wgaXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwpAQCAtMjc3LDYgKzI3
OCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAorICAgIHZvaWQgbG9zZUNv
bnRleHQoKTsKKyAgICB2b2lkIHJlc3RvcmVDb250ZXh0KCk7CisKICAgICBHcmFwaGljc0NvbnRl
eHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7
IH0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LT5wbGF0Zm9y
bUxheWVyKCk7IH0KQEAgLTI5Miw2ICsyOTYsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNz
IFdlYkdMT2JqZWN0OwogCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVt
ZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIHZvaWQgaW5pdGlhbGl6
ZU5ld0NvbnRleHQoKTsKIAogICAgIHZvaWQgYWRkT2JqZWN0KFdlYkdMT2JqZWN0Kik7CiAgICAg
dm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CkBAIC0zMzMsOCArMzM4LDYgQEAgcHVi
bGljOgogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIGJvb2wg
bV9uZWVkc1VwZGF0ZTsKICAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7Ci0gICAgLy8gRklY
TUU6IEkgdGhpbmsgdGhpcyBpcyBicm9rZW4gLS0gaXQgZG9lcyBub3QgaW5jcmVtZW50IGFueQot
ICAgIC8vIHJlZmVyZW5jZSBjb3VudHMsIHNvIG1heSByZWZlciB0byBkZXN0cm95ZWQgb2JqZWN0
cy4KICAgICBIYXNoU2V0PFJlZlB0cjxXZWJHTE9iamVjdD4gPiBtX2NhbnZhc09iamVjdHM7CiAK
ICAgICAvLyBMaXN0IG9mIGJvdW5kIFZCTydzLiBVc2VkIHRvIG1haW50YWluIGluZm8gYWJvdXQg
c2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBhbmQgc3RvcmVkIHZhbHVlcyBmb3IgRUxFTUVOVF9BUlJB
WV9CVUZGRVIKQEAgLTQyMSw2ICs0MjQsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9uZyBt
X2ltcGxlbWVudGF0aW9uQ29sb3JSZWFkVHlwZTsKICAgICBib29sIG1fdW5wYWNrRmxpcFk7CiAg
ICAgYm9vbCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGE7CisgICAgYm9vbCBtX2NvbnRleHRMb3N0
OwogCiAgICAgLy8gSGVscGVycyBmb3IgZ2V0UGFyYW1ldGVyIGFuZCBvdGhlcnMKICAgICBXZWJH
TEdldEluZm8gZ2V0Qm9vbGVhblBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbCBiL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAppbmRleCBmNzY2NDZk
YTRiZmFlNmY5MGFjYzI4NzdiYzRiMDQ0MmY5NDJiYjNjLi5jNDVlODgwMGI3NTZiMTU3MWRiODIz
ODljZTRiMTdhMTQzMjZlNDNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5pZGwKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaWRsCkBAIC00NjMsNiArNDYzLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAg
ICAvKiBXZWJHTC1zcGVjaWZpYyBlbnVtcyAqLwogICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
VU5QQUNLX0ZMSVBfWV9XRUJHTCAgICAgICAgICAgID0gMHg5MjQwOwogICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMID0gMHg5MjQxOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQ09OVEVYVF9MT1NUX1dFQkdMICAgICAgICAgICAgID0g
MHg5MjQyOwogCiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBhY3Rp
dmVUZXh0dXJlKGluIHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7
CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBhdHRhY2hTaGFkZXIo
aW4gV2ViR0xQcm9ncmFtIHByb2dyYW0sIGluIFdlYkdMU2hhZGVyIHNoYWRlcikgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CkBAIC01NTEsMTggKzU1MiwxOCBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCBnZXRQYXJhbWV0ZXIoKTsKICAgICAg
ICAgLy8gYW55IGdldFByb2dyYW1QYXJhbWV0ZXIoaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0sIGlu
IHVuc2lnbmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgZ2V0UHJvZ3JhbVBhcmFtZXRlcigpOwotICAg
ICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coaW4g
V2ViR0xQcm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBnZXRQ
cm9ncmFtSW5mb0xvZyhpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSkgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CiAgICAgICAgIC8vIGFueSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoaW4gdW5zaWduZWQg
bG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24p
OwogICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgZ2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyKCk7CiAgICAgICAgIC8vIGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoaW4gV2Vi
R0xTaGFkZXIgc2hhZGVyLCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKICAgICAgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIGdldFNoYWRl
clBhcmFtZXRlcigpIHJhaXNlcyhET01FeGNlcHRpb24pOwogCi0gICAgICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKGluIFdlYkdMU2hhZGVyIHNo
YWRlcikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IENvbnZlcnROdWxsU3RyaW5nVG89TnVsbF0gRE9NU3RyaW5nICAgIGdldFNoYWRlckluZm9Mb2co
aW4gV2ViR0xTaGFkZXIgc2hhZGVyKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAgICAgICAv
LyBUQkQKICAgICAgICAgLy8gdm9pZCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAoR0xlbnVt
IHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBw
cmVjaXNpb24pOwogCi0gICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIERPTVN0cmluZyAgICBn
ZXRTaGFkZXJTb3VyY2UoaW4gV2ViR0xTaGFkZXIgc2hhZGVyKSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKKyAgICAgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ29udmVydE51bGxTdHJpbmdUbz1OdWxs
XSBET01TdHJpbmcgICAgZ2V0U2hhZGVyU291cmNlKGluIFdlYkdMU2hhZGVyIHNoYWRlcikgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgLy8gYW55IGdldFRleFBhcmFtZXRlcihpbiB1
bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSkgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCBnZXRU
ZXhQYXJhbWV0ZXIoKTsKQEAgLTU3OSw2ICs1ODAsNyBAQCBtb2R1bGUgaHRtbCB7CiAKICAgICAg
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoaW4gdW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgbW9kZSk7CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIGJvb2xlYW4gICAgICBpc0J1ZmZlcihpbiBXZWJHTEJ1ZmZlciBidWZmZXIpOworICAg
ICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBib29sZWFuICAgICAgaXNDb250ZXh0TG9zdCgpOwog
ICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBib29sZWFuICAgICAgaXNFbmFibGVkKGluIHVu
c2lnbmVkIGxvbmcgY2FwKTsKICAgICAgICAgW1N0cmljdFR5cGVDaGVja2luZ10gYm9vbGVhbiAg
ICAgIGlzRnJhbWVidWZmZXIoaW4gV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CiAgICAg
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIGJvb2xlYW4gICAgICBpc1Byb2dyYW0oaW4gV2ViR0xQ
cm9ncmFtIHByb2dyYW0pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCmluZGV4IDIwYjRlMmQxOTc4YmY3ODIwNGFmYTE5NzQzNWVhZWE1NGMyNDMzYjcu
LjBiN2QzODhiNWQxMWMxODExZThjZDEzNWU4M2VkODEyZDcxOTZmYmMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTQwMSw2ICs0MDEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIFdlYkdMLXNwZWNpZmljIGVudW1zCiAgICAgICAgIFVOUEFD
S19GTElQX1lfV0VCR0wgPSAweDkyNDAsCiAgICAgICAgIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBI
QV9XRUJHTCA9IDB4OTI0MSwKKyAgICAgICAgQ09OVEVYVF9MT1NUX1dFQkdMID0gMHg5MjQyLAog
CiAgICAgICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogICAgICAgICBCR1JB
X0VYVCA9IDB4ODBFMSwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72845</attachid>
            <date>2010-11-03 11:27:24 -0700</date>
            <delta_ts>2010-11-03 15:06:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35626-20101103112722.patch</filename>
            <type>text/plain</type>
            <size>92065</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDMwY2E3YzM4MmMyOTc5OWU3YmM1ODdhZGJhOTRkMTlhMWFmMmI0Yy4uNjVjMjVkYWVhNjI4Yjdl
NDkwZmQ0MGFmMjQzYzhlZWE4OTA2OTc2MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjYgQEAKKzIwMTAtMTEtMDIgIEFk
cmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgbG9zdCwgcmVzdG9yZWQsIGFuZCBj
cmVhdGlvbiBmYWlsdXJlIGNvbnRleHQgZXZlbnRzIGZvcgorICAgICAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuICBUaGUgbG9zdCBhbmQgcmVzdG9yZWQgZnVuY3Rpb25zIGFyZSBub3QgaG9va2Vk
CisgICAgICAgIHVwIHlldCwgYnV0IHRoZSBjb250ZXh0IG5vdyBhY3RzIGFjY29yZGluZyB0byB0
aGUgc3BlYyBhcyBpdCBzaG91bGQKKyAgICAgICAgZHVyaW5nIGEgbG9zdCBjb250ZXh0LiAgVGVz
dGVkIG1hbnVhbGx5LCBhcyB0aGVyZSdzIG5vIHByb2dyYW1tYXRpYworICAgICAgICB3YXkgdG8g
bG9zZSBhIGNvbnRleHQgeWV0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzU2MjYKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnND
YWxsYmFjayk6CisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xDb250ZXh0RXZlbnQ6OldlYkdMQ29udGV4dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMQ29udGV4dEV2ZW50Ojp+V2ViR0xDb250ZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xDb250ZXh0RXZlbnQ6OmluaXRFdmVudCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0RXZlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRF
dmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEV2ZW50OjpzdGF0
dXNNZXNzYWdlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5pZGw6
IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVO
ZXdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWN0
aXZlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0
dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJp
bmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJpbmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyU3RlbmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmN1bGxGYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlU2hhZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoTWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZmluaXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2gpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRG
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVN
aXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3Rp
dmVBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRB
Y3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1Q
YXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQ
cm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3Nvcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcFNlcGFyYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRC
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyREltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTFmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisKIDIwMTAtMTEtMDMgIFpvbHRhbiBIZXJj
emVnICA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaXJrIFNj
aHVsemUuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IGU3ZmY0MzgyNjNjNTE0NmNiMDk5NmM1NzMyOWYyYzkwNTM3N2FkNmMuLjE2
ZTJkZDBkZTllMmEyODY3MDBmZDQxNjBlNzVlMTc2ODE3Mjc2YzIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMTYsNiArMjE2
LDcgQEAKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaWRsJywKICAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwnLAogICAgICAgICAgICAgJ2h0
bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRsJywKKyAgICAgICAgICAgICdodG1s
L2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFBy
b2dyYW0uaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5p
ZGwnLApAQCAtMTg2NSw2ICsxODY2LDggQEAKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJH
TEJ1ZmZlci5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5jcHAnLAor
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmgnLAogICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwJywKICAgICAgICAgICAgICdodG1s
L2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dl
YkdMR2V0SW5mby5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAwYmMwZmE2YWY3NDMwMWVjNjFhZWU3NDZhMjA5YTgyYzhiZjAxOWZkLi40NmE0ZjVi
NzYwNTUyMzZkZWFmZGRmYjkyNmZmZjk5MTgwOTAwYjMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjg3NSw2ICsyODc1LDggQEAKIAkJOTNGMTlCMTUw
ODI0NUU1OTAwMUU5QUJDIC8qIENvY29hLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzI4Njk1MDI4NDZEQ0QwMTg2MzVDQSAvKiBD
b2NvYS5mcmFtZXdvcmsgKi87IH07CiAJCTkzRjE5QjE2MDgyNDVFNTkwMDFFOUFCQyAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUu
ZnJhbWV3b3JrICovOyB9OwogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyogbGliaWN1Y29y
ZS5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovOyB9OworCQk5
M0Y2RjFFRDEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGNkYxRUExMjdGNzBCMTAw
NTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCAqLzsgfTsKKwkJOTNGNkYxRUUxMjdGNzBC
MTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y2RjFFQjEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xD
b250ZXh0RXZlbnQuaCAqLzsgfTsKIAkJOTNGOTI1NDMwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNr
ZWRSYWRpb0J1dHRvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzRjkyNTQxMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGOTI1
NDQwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGOTI1NDIwRjdFRjVCODAwN0Uz
N0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuY3BwICovOyB9OwogCQk5M0Y5QjY1NzBCQTBGMzVF
MDA4NTQwNjQgLyogRE9NSFRNTENhbnZhc0VsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y5QjY1NDBCQTBGMzVFMDA4NTQwNjQgLyogRE9N
SFRNTENhbnZhc0VsZW1lbnQubW0gKi87IH07CkBAIC04OTUwLDYgKzg5NTIsOSBAQAogCQk5M0Yx
OUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54
bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNv
cmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViQ29y
ZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkzRjFE
MzFBMDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7
IG5hbWUgPSBsaWJpY3Vjb3JlLmR5bGliOyBwYXRoID0gL3Vzci9saWIvbGliaWN1Y29yZS5keWxp
Yjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJOTNGNkYxRUExMjdGNzBCMTAwNTVD
QjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYkdMQ29udGV4dEV2ZW50LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRl
eHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRjZGMUVCMTI3Rjcw
QjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJHTENvbnRleHRFdmVudC5oOyBwYXRoID0gY2FudmFzL1dlYkdMQ29udGV4
dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRjZGMUVDMTI3RjcwQjEw
MDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
V2ViR0xDb250ZXh0RXZlbnQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGOEIzMDUwQTMwMEZFMTAwRjYxQUI4
IC8qIENvZGVHZW5lcmF0b3IucG0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0g
Q29kZUdlbmVyYXRvci5wbTsgcGF0aCA9IHNjcmlwdHMvQ29kZUdlbmVyYXRvci5wbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGOEIzMDYwQTMwMEZFQTAwRjYxQUI4IC8qIENvZGVH
ZW5lcmF0b3JKUy5wbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnBlcmw7IG5hbWUgPSBDb2RlR2Vu
ZXJhdG9ySlMucG07IHBhdGggPSAuLi9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+Ijsgd3JhcHNMaW5lcyA9IDA7IH07CiAJCTkzRjhCMzA3MEEzMDBGRUEw
MEY2MUFCOCAvKiBnZW5lcmF0ZS1iaW5kaW5ncy5wbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnBl
cmw7IG5hbWUgPSAiZ2VuZXJhdGUtYmluZGluZ3MucGwiOyBwYXRoID0gInNjcmlwdHMvZ2VuZXJh
dGUtYmluZGluZ3MucGwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1NjQsNiAr
MTI1NjksOSBAQAogCQkJCTZFNEU5MUE5MTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRB
dHRyaWJ1dGVzLmNwcCAqLywKIAkJCQk2RTRFOTFBQTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xD
b250ZXh0QXR0cmlidXRlcy5oICovLAogCQkJCTZFNEU5MUFCMTBGN0ZCMzEwMEEyNzc5QyAvKiBX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbCAqLywKKwkJCQk5M0Y2RjFFQTEyN0Y3MEIxMDA1NUNC
MDYgLyogV2ViR0xDb250ZXh0RXZlbnQuY3BwICovLAorCQkJCTkzRjZGMUVCMTI3RjcwQjEwMDU1
Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5oICovLAorCQkJCTkzRjZGMUVDMTI3RjcwQjEwMDU1
Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5pZGwgKi8sCiAJCQkJNDlDN0I5QUUxMDQyRDMyRTAw
MDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuY3BwICovLAogCQkJCTQ5QzdCOUFGMTA0MkQzMkUw
MDA5RDQ0NyAvKiBXZWJHTEZyYW1lYnVmZmVyLmggKi8sCiAJCQkJNDlDN0I5QjAxMDQyRDMyRTAw
MDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaWRsICovLApAQCAtMjEyNDMsNiArMjEyNTEsNyBA
QAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVk
aXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNGNkYxRUUxMjdGNzBCMTAwNTVDQjA2IC8qIFdl
YkdMQ29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIzODA0LDYgKzIzODEzLDcgQEAK
IAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmlj
b2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQg
LyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0Y2RjFFRDEyN0Y3MEIxMDA1
NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCmlu
ZGV4IDY0M2NlNjQ5OGUxOGQ3MDBkMGY3MzMwYTU4ZjdhZDM2YjJhZDA1M2EuLmU0MTQyNzhkODFi
M2IwMTNlYjM0NjZmMDJhYTczMjI4ODA0YmE5ZDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCkBAIC0xNzEsMTUgKzE3
MSwxNSBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRl
cnMoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
CiAgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gdG9XZWJHTFByb2dyYW0oZXhlYy0+YXJndW1l
bnQoMCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBWZWN0b3I8V2ViR0xT
aGFkZXIqPiBzaGFkZXJzOwogICAgIGJvb2wgc3VjY2VlZCA9IGNvbnRleHQtPmdldEF0dGFjaGVk
U2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogICAgIGlmICghc3VjY2VlZCkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBz
aGFkZXJzLnNpemUoKTsgKytpaSkKICAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9i
YWxPYmplY3QoKSwgc2hhZGVyc1tpaV0pKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAppbmRleCA5
MzQ2YTA1NDdjODQxZjg4NDYzZjczNmU2NWI4MjcxMDlmZjRlNjRhLi5iMjI0MGVkYzJjZTA4NGY4
YzNiNjhiYTQxNDdlY2JiOTRmNzgxNzU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCkBAIC0y
MzYsMTAgKzIzNiwxMCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEF0dGFjaGVkU2hhZGVyc0NhbGxiYWNrKGNvbnN0CiAgICAgYm9vbCBzdWNjZWVk
ID0gY29udGV4dC0+Z2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIHNoYWRlcnMsIGVjKTsKICAg
ICBpZiAoZWMpIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKLSAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAg
ICAgfQogICAgIGlmICghc3VjY2VlZCkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
KyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJy
YXkgPSB2ODo6QXJyYXk6Ok5ldyhzaGFkZXJzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaWkg
PSAwOyBpaSA8IHNoYWRlcnMuc2l6ZSgpOyArK2lpKQogICAgICAgICBhcnJheS0+U2V0KHY4OjpJ
bnRlZ2VyOjpOZXcoaWkpLCB0b1Y4KHNoYWRlcnNbaWldKSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9FdmVudE5hbWVzLmggYi9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKaW5kZXggNjQ0MDAw
MDFlMTZhYWZiMTU1OTZjNzUwNTIzNzU4MTQxZjIyYWZkOC4uYWVhZDJiYzFkMjg0NmM1Y2IwZmQ2
ODZmNjQ2NGZkY2QwNzc5M2Y1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5o
CisrKyBiL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaApAQCAtMTY4LDcgKzE2OCwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgXAogICAgIG1hY3JvKHdlYmtpdGZ1bGxzY3JlZW5jaGFuZ2Up
IFwKICAgICBcCi0gICAgbWFjcm8od2Via2l0c3BlZWNoY2hhbmdlKQorICAgIG1hY3JvKHdlYmtp
dHNwZWVjaGNoYW5nZSkgXAorICAgIFwKKyAgICBtYWNybyh3ZWJnbGNvbnRleHRsb3N0KSBcCisg
ICAgbWFjcm8od2ViZ2xjb250ZXh0cmVzdG9yZWQpIFwKKyAgICBtYWNybyh3ZWJnbGNvbnRleHRj
cmVhdGlvbmVycm9yKSBcCiAgICAgXAogLy8gZW5kIG9mIERPTV9FVkVOVF9OQU1FU19GT1JfRUFD
SAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNw
cCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmI3YTI3N2ZlNjBlMGE5MzIyNTI3NTlmZjM0Yzk2NDIzMjY3N2FkM2MKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNwcApAQCAtMCwwICsx
LDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdMQ29udGV4
dEV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViR0xDb250ZXh0RXZlbnQ6Oldl
YkdMQ29udGV4dEV2ZW50KCkKK3sKK30KKworV2ViR0xDb250ZXh0RXZlbnQ6OldlYkdMQ29udGV4
dEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2Fu
Y2VsYWJsZSwgY29uc3QgU3RyaW5nJiBzdGF0dXNNZXNzYWdlKQorICAgIDogRXZlbnQodHlwZSwg
Y2FuQnViYmxlLCBjYW5jZWxhYmxlKQorICAgICwgbV9zdGF0dXNNZXNzYWdlKHN0YXR1c01lc3Nh
Z2UpCit7Cit9CisKK1dlYkdMQ29udGV4dEV2ZW50Ojp+V2ViR0xDb250ZXh0RXZlbnQoKQorewor
fQorCit2b2lkIFdlYkdMQ29udGV4dEV2ZW50Ojppbml0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJpbmcmIHN0
YXR1c01lc3NhZ2UpCit7CisgICAgaWYgKGRpc3BhdGNoZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRXZlbnQ6OmluaXRFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUpOworICAg
IG1fc3RhdHVzTWVzc2FnZSA9IHN0YXR1c01lc3NhZ2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQu
aCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
NDg3NjliN2UyODg2MDQyYzFkZmZjMDNmYjM1ZDRmMGUwNjA2MTVlCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5oCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYkdMQ29udGV4dEV2ZW50X2gKKyNkZWZpbmUgV2ViR0xDb250
ZXh0RXZlbnRfaAorCisjaW5jbHVkZSAiRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBXZWJHTENvbnRleHRFdmVudCA6IHB1YmxpYyBFdmVudCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMQ29udGV4dEV2ZW50KTsKKyAgICB9CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNvbnN0IFN0cmlu
ZyYgc3RhdHVzTWVzc2FnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
R0xDb250ZXh0RXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCBzdGF0dXNNZXNzYWdl
KSk7CisgICAgfQorICAgIHZpcnR1YWwgfldlYkdMQ29udGV4dEV2ZW50KCk7CisKKyAgICB2b2lk
IGluaXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29s
IGNhbmNlbGFibGUsIGNvbnN0IFN0cmluZyYgc3RhdHVzTWVzc2FnZSk7CisKKyAgICBjb25zdCBT
dHJpbmcmIHN0YXR1c01lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1c01lc3NhZ2U7IH0K
KworcHJpdmF0ZToKKyAgICBXZWJHTENvbnRleHRFdmVudCgpOworICAgIFdlYkdMQ29udGV4dEV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2Vs
YWJsZSwgY29uc3QgU3RyaW5nJiBzdGF0dXNNZXNzYWdlKTsKKworICAgIFN0cmluZyBtX3N0YXR1
c01lc3NhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJH
TENvbnRleHRFdmVudF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29u
dGV4dEV2ZW50LmlkbCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaWRs
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjMwOTczYTkwYTM5OGJhODcwN2M2MDhlNmFkZTQ4NDIyZWQyYjNmMjkKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50Lmlk
bApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGh0bWwgeworICAgIGludGVyZmFjZSBb
CisgICAgICAgIENvbmRpdGlvbmFsPTNEX0NBTlZBUywKKyAgICBdIFdlYkdMQ29udGV4dEV2ZW50
IDogRXZlbnQgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0YXR1c01l
c3NhZ2U7CisgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgaW5pdEV2ZW50KGluIERP
TVN0cmluZyBldmVudFR5cGVBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluIGJvb2xlYW4gY2FuQnViYmxlQXJnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbmNlbGFibGVBcmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERPTVN0cmluZyBzdGF0dXNN
ZXNzYWdlQXJnKTsKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCmluZGV4IGQ3NWNhNWU3MGRhZTRkYzUwN2QzYTg4MzZmYWE5ZTVkZTg1
MDhjNWIuLmViOTBhY2NiNTA5MGNkMGU2NWNkMmY5MWJhNjViNzNlODMxN2EyYTIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTQ4LDYgKzQ4
LDcgQEAKICNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKICNpbmNsdWRlICJXZWJHTEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJH
TENvbnRleHRFdmVudC5oIgogI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKICNpbmNsdWRl
ICJXZWJHTFByb2dyYW0uaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgpAQCAtOTAs
OCArOTEsMTAgQEAgUGFzc093blB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlKEhUTUxDYW52YXNFbGVtZW4KICAgICBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBlbXB0eUF0dHJpYnV0ZXM7CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cnMgPyBhdHRycy0+YXR0
cmlidXRlcygpIDogZW1wdHlBdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CiAKLSAgICBpZiAoIWNv
bnRleHQpCisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVu
dChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVh
dGlvbmVycm9yRXZlbnQsIGZhbHNlLCB0cnVlLCAiQ291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNv
bnRleHQuIikpOwogICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgICAgIAogICAgIHJldHVy
biBuZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgY29udGV4dCk7CiB9CkBAIC05OSwx
OSArMTAyLDMyIEBAIFBhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVuCiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFz
LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogICAgIDogQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAg
ICAsIG1fbmVlZHNVcGRhdGUodHJ1ZSkKLSAgICAsIG1fbWFya2VkQ2FudmFzRGlydHkoZmFsc2Up
Ci0gICAgLCBtX2FjdGl2ZVRleHR1cmVVbml0KDApCiAgICAgLCBtX3ZpZGVvQ2FjaGUoNCkKLSAg
ICAsIG1fcGFja0FsaWdubWVudCg0KQotICAgICwgbV91bnBhY2tBbGlnbm1lbnQoNCkKLSAgICAs
IG1fdW5wYWNrRmxpcFkoZmFsc2UpCi0gICAgLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEoZmFs
c2UpCisgICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQogewogICAgIEFTU0VSVChtX2NvbnRleHQp
OworICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCit7CisgICAgbV9uZWVkc1VwZGF0ZSA9IHRy
dWU7CisgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOworICAgIG1fYWN0aXZlVGV4dHVy
ZVVuaXQgPSAwOworICAgIG1fcGFja0FsaWdubWVudCA9IDQ7CisgICAgbV91bnBhY2tBbGlnbm1l
bnQgPSA0OworICAgIG1fdW5wYWNrRmxpcFkgPSBmYWxzZTsKKyAgICBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEgPSBmYWxzZTsKKyAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOworICAgIG1fYm91
bmRFbGVtZW50QXJyYXlCdWZmZXIgPSAwOworICAgIG1fY3VycmVudFByb2dyYW0gPSAwOworICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAw
OworICAgIG1fdmVydGV4QXR0cmliU3RhdGUuY2xlYXIoKTsKIAogICAgIGludCBudW1Db21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJm51bUNvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fdGV4dHVyZVVuaXRzLmNsZWFyKCk7CiAgICAg
bV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwogCiAg
ICAgaW50IG51bVZlcnRleEF0dHJpYnMgPSAwOwpAQCAtMTk5LDYgKzIxNSw4IEBAIGludCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnNpemVJbkJ5dGVzKGludCB0eXBlKQogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAodGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCA+PSBtX3RleHR1cmVVbml0cy5zaXplKCkpIHsKICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjExLDcgKzIyOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSwgRXhjZXB0aW9uQ29k
ZSYKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFt
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hh
ZGVyKHNoYWRlcikpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtMjI1LDcgKzI0Myw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBXZWJHTFNoYWRlciogc2hhCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0
dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAg
ICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24ob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBpbmRleCwgbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKQEAgLTIzNCw2ICsyNTIsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymlu
ZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbAogdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdl
YkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChidWZmZXIgJiYgYnVmZmVyLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgIHJldHVybjsKQEAgLTI2Miw2ICsyODIsOCBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xCdWZmZXIq
IGJ1ZmZlcgogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybjsKICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29udGV4dCgpICE9
IHRoaXMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CkBAIC0yNzgsNiAr
MzAwLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmYKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1
ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBp
ZiAocmVuZGVyQnVmZmVyICYmIHJlbmRlckJ1ZmZlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CkBAIC0yOTUsNiArMzE5LDggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0
YXJnZXQsIFdlYkdMUmVuZGVyYnUKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4
dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5jb250
ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKQEAg
LTMyOCwxMyArMzU0LDE1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVy
ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0CiAKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91
YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAg
ICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvbih1bnNpZ25lZCBsb25nIG1vZGUp
CiB7Ci0gICAgaWYgKCF2YWxpZGF0ZUJsZW5kRXF1YXRpb24obW9kZSkpCisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGUpKQogICAgICAgICByZXR1
cm47CiAgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0zNDIsNyArMzcwLDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9uZyBtb2RlKQogCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcg
bW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpCiB7Ci0gICAgaWYgKCF2YWxpZGF0ZUJs
ZW5kRXF1YXRpb24obW9kZVJHQikgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlQWxwaGEp
KQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2Rl
UkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGVBbHBoYSkpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxw
aGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0zNTEsNyArMzc5
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1
bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmUKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcgZGZhY3Rv
cikKIHsKLSAgICBpZiAoIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhzZmFjdG9yLCBkZmFjdG9y
KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMo
c2ZhY3RvciwgZGZhY3RvcikpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmJsZW5k
RnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwpAQCAtMzU5LDcgKzM4Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVu
ZEZ1bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0CiAKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIHNy
Y1JHQiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3JjQWxwaGEsIHVuc2ln
bmVkIGxvbmcgZHN0QWxwaGEpCiB7Ci0gICAgaWYgKCF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMo
c3JjUkdCLCBkc3RSR0IpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxl
bmRGdW5jRmFjdG9ycyhzcmNSR0IsIGRzdFJHQikpCiAgICAgICAgIHJldHVybjsKICAgICBtX2Nv
bnRleHQtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxw
aGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0zNjgsNiArMzk2
LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKHVuc2ln
bmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb24KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9u
ZyB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgV2ViR0xCdWZmZXIq
IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFyZ2V0LCB1c2FnZSk7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTM4NSw2ICs0MTUsOCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwg
aW50IHNpemUsIHVuc2lnbmVkCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0
YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIHVuc2lnbmVkIGxvbmcg
dXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdldCwgdXNhZ2UpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC00MDIsNiArNDM0LDggQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIEFy
cmF5QnVmZmVyKiBkYXRhLAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgdW5zaWduZWQgbG9u
ZyB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgV2ViR0xCdWZmZXIq
IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFyZ2V0LCB1c2FnZSk7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTQxOSw2ICs0NTMsOCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwg
QXJyYXlCdWZmZXJWaWV3KiBkYQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1
YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0
YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgV2ViR0xCdWZmZXIqIGJ1ZmZl
ciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFyZ2V0LCBHcmFwaGljc0NvbnRleHQz
RDo6U1RBVElDX0RSQVcpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CkBAIC00
MzYsNiArNDcyLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBBcnIKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNl
dCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVT
RURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsK
ICAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0
YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybjsKQEAgLTQ1Miw2ICs0OTAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQs
IEFycgogCiB1bnNpZ25lZCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQ
UE9SVEVEOwogICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
KSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtNDY2LDYgKzUwNiw4IEBA
IHVuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
bGVhcih1bnNpZ25lZCBsb25nIG1hc2spCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIGlmIChtYXNrICYgfihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpIHsKICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTQ4MCw2ICs1MjIsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2xlYXIodW5zaWduZWQgbG9uZyBtYXNrKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2xlYXJDb2xvcihkb3VibGUgciwgZG91YmxlIGcsIGRvdWJsZSBiLCBkb3VibGUgYSkKIHsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGlzbmFu
KHIpKQogICAgICAgICByID0gMDsKICAgICBpZiAoaXNuYW4oZykpCkBAIC00OTQsMTggKzUzOCwy
NCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xvcihkb3VibGUgciwgZG91
YmxlIGcsIGRvdWJsZSBiLCBkb3VibGUgYSkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisg
ICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjbGVhclN0ZW5jaWwobG9uZyBzKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChzKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wg
YWxwaGEpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IG1fY29udGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtNTEzLDcgKzU2Myw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJv
b2wgYmx1ZSwgYm9vbCBhbHBoCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNo
YWRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclplcm8o
c2hhZGVyKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTUyMSw2
ICs1NzEsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlcihXZWJH
TFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYwogCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWws
IHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCiB7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghdmFsaWRhdGVUZXhG
dW5jUGFyYW1ldGVycyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpKQogICAgICAgICByZXR1cm47CiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRl
eHR1cmVCaW5kaW5nKHRhcmdldCwgdHJ1ZSk7CkBAIC01NTAsNiArNjAyLDggQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBs
b25nIGxldmVsLCB1bnMKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJ
bWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxv
bmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVy
bjsKICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0
LCB0cnVlKTsKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTcxLDYgKzYyNSw4
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwKIAogUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQogeworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbyA9IFdl
YkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7CiAgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJl
dHVybiBvOwpAQCAtNTc4LDYgKzYzNCw4IEBAIFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKICAgICAgICAgCiBQYXNzUmVmUHRyPFdl
YkdMRnJhbWVidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIo
KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiAwOwogICAgIFJl
ZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRoaXMp
OwogICAgIGFkZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsKQEAgLTU4NSw2ICs2NDMs
OCBAQCBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlRnJhbWVidWZmZXIoKQogCiBQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQorICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBvID0gV2ViR0xU
ZXh0dXJlOjpjcmVhdGUodGhpcyk7CiAgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJldHVy
biBvOwpAQCAtNTkyLDYgKzY1Miw4IEBAIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQogCiBQYXNzUmVmUHRyPFdlYkdMUHJvZ3Jh
bT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkKIHsKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xQcm9ncmFt
PiBvID0gV2ViR0xQcm9ncmFtOjpjcmVhdGUodGhpcyk7CiAgICAgYWRkT2JqZWN0KG8uZ2V0KCkp
OwogICAgIHJldHVybiBvOwpAQCAtNTk5LDYgKzY2MSw4IEBAIFBhc3NSZWZQdHI8V2ViR0xQcm9n
cmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVByb2dyYW0oKQogCiBQYXNzUmVmUHRy
PFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBvID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0
ZSh0aGlzKTsKICAgICBhZGRPYmplY3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87CkBAIC02MDcs
NiArNjcxLDggQEAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQogUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyB0eXBlLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpWRVJURVhfU0hBREVSICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUikgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1cm4gMDsKQEAgLTYxOSwx
MyArNjg1LDE1IEBAIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSwKIAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmN1bGxGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5jdWxsRmFjZShtb2Rl
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCiB7Ci0g
ICAgaWYgKCFidWZmZXIpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhYnVmZmVyKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgYnVmZmVyLT5kZWxldGVPYmplY3QoKTsKQEAgLTY0Nyw3
ICs3MTUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKFdlYkdM
QnVmZmVyKiBidWZmZXIpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFt
ZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKIHsKLSAgICBpZiAoIWZyYW1l
YnVmZmVyKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWZyYW1lYnVmZmVyKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKGZyYW1lYnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7
CiAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKQEAgLTY1OSw3ICs3MjcsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1
ZmZlciogZnJhbWVidWZmZXIpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQ
cm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBpZiAoIXByb2dyYW0pCisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuOwogICAgIGlm
IChwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CkBAIC02
NzIsNyArNzQwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVByb2dyYW0o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiB7Ci0gICAg
aWYgKCFyZW5kZXJidWZmZXIpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhcmVuZGVyYnVm
ZmVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtX3JlbmRlcmJ1
ZmZlckJpbmRpbmcpCiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7CkBAIC02ODMs
NyArNzUxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZl
cihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7Ci0gICAgaWYgKCFz
aGFkZXIpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhc2hhZGVyKQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgc2hhZGVyLT5kZWxldGVPYmplY3QoKTsKQEAgLTY5MSw3ICs3NTksNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBz
aGFkZXIpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKFdlYkdM
VGV4dHVyZSogdGV4dHVyZSkKIHsKLSAgICBpZiAoIXRleHR1cmUpCisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhdGV4dHVyZSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHRleHR1cmUt
PmRlbGV0ZU9iamVjdCgpOwpAQCAtNzAxLDE4ICs3NjksMjQgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQogCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYykKIHsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5k
ZXB0aEZ1bmMoZnVuYyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoTWFzayhib29sIGZsYWcpCiB7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+
ZGVwdGhNYXNrKGZsYWcpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdlKGRvdWJsZSB6TmVhciwg
ZG91YmxlIHpGYXIpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJu
OwogICAgIG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTcyMCw3ICs3OTQsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhSYW5nZShkb3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKQog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChz
aGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFwcm9ncmFtLT5kZXRhY2hTaGFkZXIo
c2hhZGVyKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CkBAIC03MzQsNyArODA4LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0s
IFdlYkdMU2hhZGVyKiBzaGEKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUo
dW5zaWduZWQgbG9uZyBjYXApCiB7Ci0gICAgaWYgKCF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC03NDMsNiArODE3LDggQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbmRleCA+PSBtX21h
eFZlcnRleEF0dHJpYnMpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKQEAgLTkz
OSw3ICsxMDE1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXModW5z
aWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW4KIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwogCi0gICAgaWYgKCF2YWxpZGF0ZURyYXdNb2RlKG1vZGUpKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRHJhd01vZGUobW9kZSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChmaXJzdCA8IDAgfHwgY291bnQgPCAwKSB7CkBAIC05ODgsNyArMTA2NCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBt
b2RlLCBsb25nIGNvdW50LCB1bnNpZ25lCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKIAotICAg
IGlmICghdmFsaWRhdGVEcmF3TW9kZShtb2RlKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZURyYXdNb2RlKG1vZGUpKQogICAgICAgICByZXR1cm47CiAKICAgICBzd2l0Y2gg
KHR5cGUpIHsKQEAgLTEwNTMsNyArMTEyOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGNvdW50LCB1bnNpZ25lCiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUodW5zaWduZWQgbG9uZyBjYXApCiB7
Ci0gICAgaWYgKCF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1f
Y29udGV4dC0+ZW5hYmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKQEAgLTEwNjIsNiArMTEzOCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFi
bGUodW5zaWduZWQgbG9uZyBjYXApCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAg
ICAgICByZXR1cm47CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewogICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3OCw2ICsxMTU2LDggQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEV4Y2VwdGkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgp
CiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29u
dGV4dC0+ZmluaXNoKCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQpA
QCAtMTA4NSw2ICsxMTY1LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgp
CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgpCiB7CisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+Zmx1c2goKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CkBAIC0xMDkyLDcgKzExNzQsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2goKQogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0
LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0
ZXJzKHRhcmdldCwgYXR0YWNobWVudCkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgYXR0YWNobWVudCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAocmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKQEAgLTExMTcsNyArMTE5OSw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJh
bWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0
YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwg
bG9uZyBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGF0dGFj
aG1lbnQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJG
dW5jUGFyYW1ldGVycyh0YXJnZXQsIGF0dGFjaG1lbnQpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKGxldmVsKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwpAQCAtMTE0MSwxMiArMTIyMywxNiBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmcm9udEZh
Y2UodW5zaWduZWQgbG9uZyBtb2RlKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAg
ICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmZyb250RmFjZShtb2RlKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCiB7CisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFs
aWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIGZhbHNlKTsKICAgICBpZiAoIXRleCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTE3NSw5ICsxMjYxLDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdlbmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQogUGFzc1JlZlB0cjxXZWJH
TEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgaWYg
KCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiAwOworICAg
IEFjdGl2ZUluZm8gaW5mbzsKICAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlQXR0cmliKG9i
amVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8pKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gV2ViR0xBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGlu
Zm8uc2l6ZSk7CkBAIC0xMTg2LDkgKzEyNzIsOSBAQCBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5m
bz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKgog
UGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0
aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgQWN0aXZlSW5m
byBpbmZvOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAg
ICByZXR1cm4gMDsKKyAgICBBY3RpdmVJbmZvIGluZm87CiAgICAgaWYgKCFtX2NvbnRleHQtPmdl
dEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQpAQCAtMTIwMSw3ICsx
Mjg3LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyhX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIFZlY3RvcjxXZWIKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OwogICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmpl
Y3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCBudW1TaGFkZXJz
ID0gMDsKICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSks
IEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTLCAmbnVtU2hhZGVycyk7CkBAIC0x
MjI2LDEyICsxMzEyLDE2IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hl
ZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBWZWN0b3I8V2ViCiAKIGludCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybiAtMTsKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwogfQogCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwogICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiAm
JiB0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKSB7CiAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSk7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKQEAgLTEyNTIsNiAr
MTM0Miw4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBh
cmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zCiAKIFBhc3NSZWZQdHI8V2ViR0xDb250
ZXh0QXR0cmlidXRlcz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRDb250ZXh0QXR0cmlidXRl
cygpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
Ly8gV2UgYWx3YXlzIG5lZWQgdG8gcmV0dXJuIGEgbmV3IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMg
b2JqZWN0IHRvCiAgICAgLy8gcHJldmVudCB0aGUgdXNlciBmcm9tIG11dGF0aW5nIGFueSBjYWNo
ZWQgdmVyc2lvbi4KICAgICByZXR1cm4gV2ViR0xDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKG1f
Y29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSk7CkBAIC0xMjY1LDcgKzEzNTcsNyBAQCB1
bnNpZ25lZCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXJyb3IoKQogV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBh
dHRhY2htZW50KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUZyYW1lYnVm
ZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgpAQCAtMTMxMyw2ICsx
NDA1LDggQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKHVuc2lnbmVkIGwKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBXZWJHTFN0YXRlUmVzdG9y
ZXIodGhpcywgZmFsc2UpOwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKQEAgLTE1MDQsNyArMTU5OCw3IEBAIFdlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBu
YW1lLCBFeGNlcHRpb25DCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQ
cm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
IXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwogCiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKQEAgLTE1MzMs
OCArMTYyNyw4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dy
YW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1CiBTdHJpbmcgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0
ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQotICAgICAgICByZXR1cm4gIiI7CisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAg
cmV0dXJuIG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2cob2JqZWN0T3JaZXJvKHByb2dyYW0p
KTsKIH0KQEAgLTE1NDIsNiArMTYzNiw4IEBAIFN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uCiBXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIGlmICh0YXJnZXQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CkBAIC0xNTc1LDcgKzE2NzEsNyBAQCBXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIodW5zaWduZWQgbG9u
ZyB0YXJnZQogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFy
YW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdl
YkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAg
V2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKICAgICBpbnQgdmFsdWUgPSAwOwpAQCAt
MTYwMCw4ICsxNjk2LDggQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIHVuc2kKIFN0cmluZyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlk
YXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIiOworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAg
cmV0dXJuIG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhvYmplY3RPclplcm8oc2hhZGVyKSk7
CiB9CkBAIC0xNjA5LDggKzE3MDUsOCBAQCBTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZAogU3RyaW5n
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCi0gICAgICAgIHJldHVybiAiIjsKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2Up
OwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldFNoYWRlclNvdXJjZShvYmplY3RPclplcm8oc2hh
ZGVyKSk7CiB9CkBAIC0xNjE4LDYgKzE3MTQsOCBAQCBTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZQog
V2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlk
YXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0LCBmYWxzZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKQEAgLTE2MzksNyArMTczNyw3IEBAIFdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlm
b3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHVu
aWZvcm1Mb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIGlmICghdW5pZm9ybUxvY2F0aW9uKSB7CiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOwpAQCAtMTc4Myw3ICsxODgxLDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkcKIFBh
c3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICgh
dmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gMDsKICAgICBX
ZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIGxvbmcgdW5pZm9ybUxvY2F0aW9u
ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBu
YW1lKTsKQEAgLTE3OTUsNiArMTg5Myw4IEBAIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRp
b24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMCiBXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIodW5zaWduZWQg
bG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNl
KTsKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CiAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OwpAQCAtMTg0Miw2ICsxOTQyLDggQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmUKIAogbG9uZyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25n
IGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybiAwOwogICAgIGxvbmcgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xODQ5LDYgKzE5NTEsOCBAQCBsb25n
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxv
bmcgaW5kZXgsIHVuc2lnbmVkCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpCiB7CisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTE4NTksMjIgKzE5NjMsMjcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKIAogYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCiB7
Ci0gICAgaWYgKCFidWZmZXIpCisgICAgaWYgKCFidWZmZXIgfHwgaXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gbV9jb250ZXh0LT5pc0J1ZmZlcihi
dWZmZXItPm9iamVjdCgpKTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQ29u
dGV4dExvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRMb3N0OworfQorCiBib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKQogewot
ICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCisgICAgaWYgKCF2YWxpZGF0ZUNhcGFi
aWxpdHkoY2FwKSB8fCBpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQoY2FwKTsKIH0KIAogYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIp
CiB7Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICBpZiAoIWZyYW1lYnVmZmVyIHx8IGlzQ29u
dGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29udGV4
dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOwpAQCAtMTg4Miw3ICsxOTkx
LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFt
ZWJ1ZmZlciogZnJhbWVidWZmZXIpCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1By
b2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIGlmICghcHJvZ3JhbSkKKyAgICBp
ZiAoIXByb2dyYW0gfHwgaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICByZXR1cm4gbV9jb250ZXh0LT5pc1Byb2dyYW0ocHJvZ3JhbS0+b2JqZWN0KCkpOwpAQCAt
MTg5MCw3ICsxOTk5LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0pCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Jl
bmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQogewotICAgIGlmICgh
cmVuZGVyYnVmZmVyKQorICAgIGlmICghcmVuZGVyYnVmZmVyIHx8IGlzQ29udGV4dExvc3QoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNSZW5kZXJi
dWZmZXIocmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7CkBAIC0xODk4LDcgKzIwMDcsNyBAQCBib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIq
IHJlbmRlcmJ1ZmZlcikKIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdl
YkdMU2hhZGVyKiBzaGFkZXIpCiB7Ci0gICAgaWYgKCFzaGFkZXIpCisgICAgaWYgKCFzaGFkZXIg
fHwgaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
bV9jb250ZXh0LT5pc1NoYWRlcihzaGFkZXItPm9iamVjdCgpKTsKQEAgLTE5MDYsNyArMjAxNSw3
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1NoYWRlcihXZWJHTFNoYWRlciogc2hh
ZGVyKQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSkKIHsKLSAgICBpZiAoIXRleHR1cmUpCisgICAgaWYgKCF0ZXh0dXJlIHx8IGlz
Q29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNUZXh0dXJlKHRleHR1cmUtPm9iamVjdCgpKTsKQEAgLTE5MTQsNiArMjAyMyw4IEBA
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0
dXJlKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKGRvdWJsZSB3aWR0
aCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9j
b250ZXh0LT5saW5lV2lkdGgoKGZsb2F0KSB3aWR0aCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE5MjEsNyArMjAzMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpsaW5lV2lkdGgoZG91YmxlIHdpZHRoKQogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmpl
Y3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpKSB7CiAgICAgICAgIGlmICghcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpIHx8ICFwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKSkgewpAQCAtMTk0MSw2ICsyMDUyLDgg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pCiB7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAocG5hbWUpIHsK
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgogICAgICAg
ICBtX3VucGFja0ZsaXBZID0gcGFyYW07CkBAIC0xOTY3LDEyICsyMDgwLDE2IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25n
IHBhcmFtKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cG9seWdvbk9mZnNldChkb3Vi
bGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNldCgoZmxvYXQpIGZhY3Rv
ciwgKGZsb2F0KSB1bml0cyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMobG9uZyB4LCBsb25n
IHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWdu
ZWQgbG9uZyB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICgh
Y2FudmFzKCktPm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CiAg
ICAgICAgIHJldHVybjsKQEAgLTIwNDQsMTIgKzIxNjEsMTYgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVp
Z2h0LAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVy
KCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9j
b250ZXh0LT5yZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVm
ZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZv
cm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7CisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQx
NjoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKQEAgLTIwNjksMTIgKzIxOTAs
MTYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGwKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpCiB7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+c2FtcGxl
Q292ZXJhZ2UoKGZsb2F0KSB2YWx1ZSwgaW52ZXJ0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3Nvcihs
b25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQp
CiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29u
dGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjA4Miw3ICsyMjA3LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnNjaXNzb3IobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmUKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaGFkZXJTb3VyY2UoV2ViR0xT
aGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNo
YWRlcikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChz
aGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2Uob2Jq
ZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKQEAgLTIwOTAsMzYgKzIyMTUsNDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmkK
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKHVuc2lnbmVkIGxvbmcg
ZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuYyhmdW5j
LCByZWYsIG1hc2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVk
IGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBt
YXNrKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBt
X2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6c3RlbmNpbE1hc2sodW5zaWduZWQgbG9uZyBtYXNrKQogeworICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnN0ZW5jaWxN
YXNrKG1hc2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFza1NlcGFyYXRlKHVuc2lnbmVkIGxv
bmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNrKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFj
ZSwgbWFzayk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcCh1bnNpZ25lZCBsb25nIGZhaWwsIHVu
c2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpCiB7CisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+c3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcFNlcGFyYXRlKHVuc2ln
bmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1
bnNpZ25lZCBsb25nIHpwYXNzKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybjsKICAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpm
YWlsLCB6cGFzcyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAg
LTIxNjksNyArMjMwNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJE
KHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
LCB1bnNpZ25lZCBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxz
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0RhdGEod2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMpKQogICAgICAgICByZXR1cm47CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscyA/IHBpeGVs
cy0+YmFzZUFkZHJlc3MoKSA6IDA7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOwpAQCAt
MjE5Niw2ICsyMzMzLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwg
SW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7CiAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBm
b3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0
YSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSk7CkBAIC0yMjEzLDYgKzIzNTIsOCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVs
LCB1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisg
ICAgICAgIHJldHVybjsKICAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkg
ewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjIyNiw2ICsyMzY3LDggQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFz
LT5idWZmZXIoKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjI1OCw2
ICsyNDAxLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTFZp
ZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPEltYWdl
PiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvKTsKICAgICBpZiAoIXZpZGVvKQogICAg
ICAgICByZXR1cm47CkBAIC0yMjY2LDYgKzI0MTEsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25l
ZAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCBwYXJhbWYsIGludCBwYXJhbWks
IGJvb2wgaXNGbG9hdCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1
cm47CiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdl
dCwgZmFsc2UpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CkBAIC0yMzExLDYgKzI0
NTgsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREJhc2UodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdQogewogICAgIC8vIEZJWE1FOiBGb3Igbm93
IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zv
cm1hdEFuZFR5cGUoZm9ybWF0LCB0eXBlKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdmFs
aWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIHRydWUpKQpAQCAtMjMyNCw2ICsyNDczLDggQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIHUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAg
ICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZm9ybWF0LCB0eXBlLCBm
bGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CkBAIC0yMzM3
LDcgKzI0ODgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCh1
bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1h
dCwgdW5zaWduZWQgdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscykpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVU
ZXhGdW5jRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscykpCiAgICAgICAg
IHJldHVybjsKICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8gcGl4ZWxzLT5iYXNlQWRkcmVzcygp
IDogMDsKICAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CkBAIC0yMzYzLDYgKzI1MTQsOCBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFnZURhdGEqIHBp
eGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAg
ICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwg
bV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewogICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFKTsKQEAgLTIzNzYsNiArMjUyOSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQs
IHVuc2lnbmVkIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7CiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC0yMzg5LDYgKzI1NDQsOCBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IGxldmVsLCB1bnNpZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZl
cigpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CkBAIC0yNDAyLDYgKzI1NTks
OCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0
YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MVmlkZW9F
bGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOworICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8pOwogICAgIGlmICghdmlkZW8pCiAgICAgICAg
IHJldHVybjsKQEAgLTI0MTEsNyArMjU3MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIWxvY2F0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnBy
b2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNDI2LDcgKzI1ODUsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgZmxvYQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAxKSkKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAxKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKQEAgLTI0MzYsNyArMjU5NSw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0KiB2LCBp
bnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDEpKQor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9j
YXRpb24sIHYsIHNpemUsIDEpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVu
aWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUpOwpAQCAtMjQ0Niw3ICsyNjA1
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxv
Y2F0aW9uKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0aW9uKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CkBAIC0yNDYxLDcgKzI2MjAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50CiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0
aW9uLCB2LCAxKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAxKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250
ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0
aCgpKTsKQEAgLTI0NzEsNyArMjYzMCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50CiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJz
KGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2
LCBzaXplKTsKQEAgLTI0ODEsNyArMjY0MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50CiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIWxvY2F0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9j
YXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNDk2LDcgKzI2NTUs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMy
QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAyKSkKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9u
LCB2LCAyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CkBAIC0yNTA2
LDcgKzI2NjUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsbwogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2
LCBzaXplLCAyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMik7
CkBAIC0yNTE2LDcgKzI2NzUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsbwogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIGludCB4LCBpbnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIWxvY2F0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dy
YW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNTMxLDcgKzI2OTAsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgaW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0
ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAyKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CkBAIC0yNTQxLDcgKzI3MDAsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGludCBz
aXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
ICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlv
biwgdiwgc2l6ZSwgMikpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9y
bTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDIpOwpAQCAtMjU1MSw3ICsyNzEw
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCB6LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
bG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTI1NjYsNyArMjcyNSw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBmbG9hCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDMpKQorICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDMpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKQEAgLTI1NzYsNyArMjczNSw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgRmxvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDMpKQorICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRp
b24sIHYsIHNpemUsIDMpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZv
cm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAzKTsKQEAgLTI1ODYsNyArMjc0
NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50IHgs
IGludCB5LCBpbnQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0
aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7CkBAIC0yNjAxLDcgKzI3NjAsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgaW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CkBAIC0yNjExLDcgKzI3NzAsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6
ZSwgMykpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDMpOwpAQCAtMjYyMSw3ICsyNzgwLDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBpbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB6LCBmbG9hdCB3LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
bG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTI2MzYsNyArMjc5NSw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBmbG9hCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDQpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKQEAgLTI2NDYsNyArMjgwNSw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgRmxvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDQpKQorICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRp
b24sIHYsIHNpemUsIDQpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZv
cm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyA0KTsKQEAgLTI2NTYsNyArMjgx
NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50IHgs
IGludCB5LCBpbnQgeiwgaW50IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFt
KCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtMjY3MSw3ICsyODMwLDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIGludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwpAQCAtMjY4MSw3ICsyODQwLDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBJbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDQpKQorICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24s
IHYsIHNpemUsIDQpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm00
aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyA0KTsKQEAgLTI2OTEsNyArMjg1MCw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJv
b2wgdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0
ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwg
diwgNCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAv
IDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0yNzAwLDcgKzI4
NTksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA0KSkKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYsIHNp
emUgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMjcwOSw3
ICsyODY4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW8KIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybU1hdHJp
eFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgOSkpCisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJh
bnNwb3NlLCB2LCA5KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1h
dHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxl
bmd0aCgpIC8gOSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTI3
MTgsNyArMjg3Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQorICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
bG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgOSkpCiAgICAgICAgIHJldHVybjsKICAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9z
ZSwgdiwgc2l6ZSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBA
IC0yNzI3LDcgKzI4ODYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1h
dHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpbwogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlm
b3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2Nh
dGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQt
PnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0
YSgpLCB2LT5sZW5ndGgoKSAvIDE2KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwpAQCAtMjczNiw3ICsyODk1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW8KIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6
ZSwgMTYpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJp
eFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgMTYpKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyAxNik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKQEAgLTI3NDUsNiArMjkwNCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChwcm9ncmFtICYm
IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjc2OCw3ICsyOTI5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm47
CiAgICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMjgzNyw2ICsyOTk4LDgg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBs
b25nIGluZGV4LCBmbG9hdCogdiwgaW50IHMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGxvbmcgc2l6ZSwgdW5zaWdu
ZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIGxvbmcgc3RyaWRlLCBsb25nIG9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVy
dGV4QXR0cmlicykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjg4MSw2
ICszMDQ0LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50
ZXIodW5zaWduZWQgbG9uZyBpbmRleCwgbG9uZyBzaXplLAogCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybjsKICAgICBpZiAoaXNuYW4oeCkpCiAgICAgICAgIHggPSAwOwogICAgIGlmIChpc25h
bih5KSkKQEAgLTI4OTMsNiArMzA1OCw0NCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbgogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojpsb3NlQ29udGV4dCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CisKKyAgICBkZXRhY2hB
bmRSZW1vdmVBbGxPYmplY3RzKCk7CisKKyAgICAvLyBUaGVyZSBpcyBubyBkaXJlY3Qgd2F5IHRv
IGNsZWFyIGVycm9ycyBmcm9tIGEgR0wgaW1wbGVtZW50YXRpb24gYW5kCisgICAgLy8gbG9vcGlu
ZyB1bnRpbCBnZXRFcnJvcigpIGJlY29tZXMgTk9fRVJST1IgbWlnaHQgY2F1c2UgYW4gaW5maW5p
dGUgbG9vcCBpZgorICAgIC8vIHRoZSBkcml2ZXIgb3IgY29udGV4dCBpbXBsZW1lbnRhdGlvbiBo
YWQgYSBidWcuICBTbywgbG9vcCBhIHJlYXNvbmFibHkKKyAgICAvLyBsYXJnZSBudW1iZXIgb2Yg
dGltZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDEwMDsgKytpKSB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlRFWFRf
TE9TVF9XRUJHTCk7CisKKyAgICBjYW52YXMoKS0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0
cnVlLCAiIikpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZUNvbnRl
eHQoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBUaGUgcmVuZGVyaW5nIGNvbnRleHQgaXMgbm90IHJlc3RvcmVkIGlmIHRoZXJlIGlzIG5v
IGhhbmRsZXIgZm9yCisgICAgLy8gdGhlIGNvbnRleHQgcmVzdG9yZWQgZXZlbnQuCisgICAgaWYg
KCFjYW52YXMoKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmdsY29udGV4dHJl
c3RvcmVkRXZlbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHRMb3N0ID0gZmFs
c2U7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKKworICAgIGNhbnZhcygpLT5kaXNwYXRj
aEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4
dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOworfQorCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVtb3ZlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgbV9j
YW52YXNPYmplY3RzLnJlbW92ZShvYmplY3QpOwpAQCAtMjkwMCw2ICszMTAzLDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQog
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmpl
Y3QpCiB7CisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOwogICAgIHJlbW92ZU9iamVjdChv
YmplY3QpOwogICAgIG1fY2FudmFzT2JqZWN0cy5hZGQob2JqZWN0KTsKIH0KQEAgLTM1MDUsNiAr
MzcwOSw4IEBAIFdlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQnVm
ZmVyRGF0YVBhcmFtZXRlcnModW5zaWduZWQgbG9uZyB0CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmSW1wbCh1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgZXhwZWN0
ZWRTaXplLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKIHsKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGluZGV4ID49IG1f
bWF4VmVydGV4QXR0cmlicykgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MzUzNyw2ICszNzQzLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YmZJbXBsKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBleHBlY3RlZFMKIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbCh1bnNpZ25lZCBsb25nIGluZGV4LCBG
bG9hdDMyQXJyYXkqIHYsIGludCBleHBlY3RlZFNpemUpCiB7CisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghdikgewogICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzU0Niw2ICszNzU0LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbCh1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJy
YXkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbCh1bnNp
Z25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNpemUsIGludCBleHBlY3RlZFNpemUpCiB7
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghdikg
ewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggNzBhZWI1NGIyOTI1MjI2NTdiYTQ3ZjBhY2Ez
OWY2YTVmMzJiYjk4MC4uMjE4OGZjOTY5MmM3ODlkMDk2MzAwMTg2ZjZkNzNlZTc2YzAwN2NkMyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAor
KysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0xNzYs
NiArMTc2LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIG1vZGUpOwogICAgIGJvb2wgaXNCdWZmZXIoV2ViR0xCdWZmZXIqKTsK
KyAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKICAgICBib29sIGlzRW5hYmxlZCh1bnNp
Z25lZCBsb25nIGNhcCk7CiAgICAgYm9vbCBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIq
KTsKICAgICBib29sIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKQEAgLTI3Nyw2ICsyNzgsOSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKKyAgICB2b2lkIGxvc2VDb250ZXh0
KCk7CisgICAgdm9pZCByZXN0b3JlQ29udGV4dCgpOworCiAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+cGxhdGZvcm1MYXll
cigpOyB9CkBAIC0yOTIsNiArMjk2LDcgQEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBXZWJH
TE9iamVjdDsKIAogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCos
IFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICB2b2lkIGluaXRpYWxpemVOZXdD
b250ZXh0KCk7CiAKICAgICB2b2lkIGFkZE9iamVjdChXZWJHTE9iamVjdCopOwogICAgIHZvaWQg
ZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwpAQCAtMzMzLDggKzMzOCw2IEBAIHB1YmxpYzoK
ICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKICAgICBib29sIG1fbmVl
ZHNVcGRhdGU7CiAgICAgYm9vbCBtX21hcmtlZENhbnZhc0RpcnR5OwotICAgIC8vIEZJWE1FOiBJ
IHRoaW5rIHRoaXMgaXMgYnJva2VuIC0tIGl0IGRvZXMgbm90IGluY3JlbWVudCBhbnkKLSAgICAv
LyByZWZlcmVuY2UgY291bnRzLCBzbyBtYXkgcmVmZXIgdG8gZGVzdHJveWVkIG9iamVjdHMuCiAg
ICAgSGFzaFNldDxSZWZQdHI8V2ViR0xPYmplY3Q+ID4gbV9jYW52YXNPYmplY3RzOwogCiAgICAg
Ly8gTGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFib3V0IHNpemVz
IGZvciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRfQVJSQVlfQlVG
RkVSCkBAIC00MjEsNiArNDI0LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxvbmcgbV9pbXBs
ZW1lbnRhdGlvbkNvbG9yUmVhZFR5cGU7CiAgICAgYm9vbCBtX3VucGFja0ZsaXBZOwogICAgIGJv
b2wgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhOworICAgIGJvb2wgbV9jb250ZXh0TG9zdDsKIAog
ICAgIC8vIEhlbHBlcnMgZm9yIGdldFBhcmFtZXRlciBhbmQgb3RoZXJzCiAgICAgV2ViR0xHZXRJ
bmZvIGdldEJvb2xlYW5QYXJhbWV0ZXIodW5zaWduZWQgbG9uZyBwbmFtZSk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgYi9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKaW5kZXggZjc2NjQ2ZGE0YmZh
ZTZmOTBhY2MyODc3YmM0YjA0NDJmOTQyYmIzYy4uYzQ1ZTg4MDBiNzU2YjE1NzFkYjgyMzg5Y2U0
YjE3YTE0MzI2ZTQzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaWRsCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmlkbApAQCAtNDYzLDYgKzQ2Myw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgLyog
V2ViR0wtc3BlY2lmaWMgZW51bXMgKi8KICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFVOUEFD
S19GTElQX1lfV0VCR0wgICAgICAgICAgICA9IDB4OTI0MDsKICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCA9IDB4OTI0MTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICA9IDB4OTI0
MjsKIAogICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYWN0aXZlVGV4
dHVyZShpbiB1bnNpZ25lZCBsb25nIHRleHR1cmUpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAg
ICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYXR0YWNoU2hhZGVyKGluIFdl
YkdMUHJvZ3JhbSBwcm9ncmFtLCBpbiBXZWJHTFNoYWRlciBzaGFkZXIpIHJhaXNlcyhET01FeGNl
cHRpb24pOwpAQCAtNTUxLDE4ICs1NTIsMTggQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgZ2V0UGFyYW1ldGVyKCk7CiAgICAgICAgIC8v
IGFueSBnZXRQcm9ncmFtUGFyYW1ldGVyKGluIFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNp
Z25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIGdldFByb2dyYW1QYXJhbWV0ZXIoKTsKLSAgICAgICAg
W1N0cmljdFR5cGVDaGVja2luZ10gRE9NU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKGluIFdlYkdM
UHJvZ3JhbSBwcm9ncmFtKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW1N0cmljdFR5
cGVDaGVja2luZywgQ29udmVydE51bGxTdHJpbmdUbz1OdWxsXSBET01TdHJpbmcgZ2V0UHJvZ3Jh
bUluZm9Mb2coaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01FeGNlcHRpb24pOwog
ICAgICAgICAvLyBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKGluIHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAg
ICAgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIGdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcigpOwogICAgICAgICAvLyBhbnkgZ2V0U2hhZGVyUGFyYW1ldGVyKGluIFdlYkdMU2hh
ZGVyIHNoYWRlciwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7
CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCBnZXRTaGFkZXJQYXJh
bWV0ZXIoKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAotICAgICAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSBET01TdHJpbmcgICAgZ2V0U2hhZGVySW5mb0xvZyhpbiBXZWJHTFNoYWRlciBzaGFkZXIp
IHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDb252
ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKGluIFdl
YkdMU2hhZGVyIHNoYWRlcikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgLy8gVEJE
CiAgICAgICAgIC8vIHZvaWQgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQgKEdMZW51bSBzaGFk
ZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQqIHJhbmdlLCBHTGludCogcHJlY2lz
aW9uKTsKIAotICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBET01TdHJpbmcgICAgZ2V0U2hh
ZGVyU291cmNlKGluIFdlYkdMU2hhZGVyIHNoYWRlcikgcmFpc2VzKERPTUV4Y2VwdGlvbik7Cisg
ICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIENvbnZlcnROdWxsU3RyaW5nVG89TnVsbF0gRE9N
U3RyaW5nICAgIGdldFNoYWRlclNvdXJjZShpbiBXZWJHTFNoYWRlciBzaGFkZXIpIHJhaXNlcyhE
T01FeGNlcHRpb24pOwogCiAgICAgICAgIC8vIGFueSBnZXRUZXhQYXJhbWV0ZXIoaW4gdW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRp
b24pOwogICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgZ2V0VGV4UGFy
YW1ldGVyKCk7CkBAIC01NzksNiArNTgwLDcgQEAgbW9kdWxlIGh0bWwgewogCiAgICAgICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBoaW50KGluIHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBpbiB1bnNpZ25lZCBsb25nIG1vZGUpOwogICAgICAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBib29sZWFuICAgICAgaXNCdWZmZXIoaW4gV2ViR0xCdWZmZXIgYnVmZmVyKTsKKyAgICAgICAg
W1N0cmljdFR5cGVDaGVja2luZ10gYm9vbGVhbiAgICAgIGlzQ29udGV4dExvc3QoKTsKICAgICAg
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gYm9vbGVhbiAgICAgIGlzRW5hYmxlZChpbiB1bnNpZ25l
ZCBsb25nIGNhcCk7CiAgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIGJvb2xlYW4gICAgICBp
c0ZyYW1lYnVmZmVyKGluIFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOwogICAgICAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSBib29sZWFuICAgICAgaXNQcm9ncmFtKGluIFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaAppbmRleCA1MDc0YmJmOTEyN2FhNDNjYTIwZTBmOTgwZTc4NmE2MzdkZDg0OWM4Li4yZGM4
NGY5Njk2M2QzYTU2ZThmZjUyZTQ0Mzg4MjE1YTY4ODgxNmIwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC00MDEsNiArNDAxLDcgQEAgcHVi
bGljOgogICAgICAgICAvLyBXZWJHTC1zcGVjaWZpYyBlbnVtcwogICAgICAgICBVTlBBQ0tfRkxJ
UF9ZX1dFQkdMID0gMHg5MjQwLAogICAgICAgICBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VC
R0wgPSAweDkyNDEsCisgICAgICAgIENPTlRFWFRfTE9TVF9XRUJHTCA9IDB4OTI0MiwKIAogICAg
ICAgICAvLyBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKICAgICAgICAgQkdSQV9FWFQg
PSAweDgwRTEsCg==
</data>
<flag name="review"
          id="63174"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="63175"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>