<?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>35153</bug_id>
          
          <creation_ts>2010-02-19 06:09:14 -0800</creation_ts>
          <short_desc>[Qt] WebGL support missing in QtWebKit</short_desc>
          <delta_ts>2010-03-22 09:30:58 -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>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://learningwebgl.com/lessons/lesson15/index.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jarkko Sakkinen">jarkko.sakkinen</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ariya.hidayat</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>henry.haverinen</cc>
    
    <cc>jarkko.sakkinen</cc>
    
    <cc>kent.hansen</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>noam</cc>
    
    <cc>skyul</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>191888</commentid>
    <comment_count>0</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-19 06:09:14 -0800</bug_when>
    <thetext>WebGL support for QtWebKit is missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191892</commentid>
    <comment_count>1</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-19 06:21:57 -0800</bug_when>
    <thetext>http://bugreports.qt.nokia.com/browse/QTWEBKIT-18</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191907</commentid>
    <comment_count>2</comment_count>
      <attachid>49078</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-19 07:32:36 -0800</bug_when>
    <thetext>Created attachment 49078
WebGL support for QtWebKit

NOTES:

    * Works only when accelerated composition is not enabled in compilation
    * Added --webgl command line switch to QGVLauncher, added toggle button to QtLauncher

Why GraphicsLayer (accelerated composition layer) doesn&apos;t handle WebGL? Missing methods:

    * setContentsToGraphicsContext3D
    * setGraphicsContext3DNeedsDisplay

I thinks adding support for content caching is subtask for this. WebGL support can be tested by compiling with  WTF_USE_ACCELERATED_COMPOSITING=0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191908</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-19 07:36:10 -0800</bug_when>
    <thetext>Attachment 49078 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
 Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:237:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:238:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:239:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:240:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:241:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:242:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:243:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:244:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:245:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:246:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:247:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:248:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:249:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:251:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:252:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:253:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:254:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:255:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:256:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:257:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:258:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:259:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:460:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:606:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:1585:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Ignoring &quot;WebKit/qt/Api/qwebsettings.h&quot;: this file is exempt from the style guide.
Total errors found: 82 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191911</commentid>
    <comment_count>4</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-19 07:50:02 -0800</bug_when>
    <thetext>Created subtask for accelerated compositioning changes: http://bugreports.qt.nokia.com/browse/QTWEBKIT-91</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191916</commentid>
    <comment_count>5</comment_count>
      <attachid>49080</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-19 08:00:25 -0800</bug_when>
    <thetext>Created attachment 49080
Qt WebGL support

Coding style fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191917</commentid>
    <comment_count>6</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-19 08:08:28 -0800</bug_when>
    <thetext>I see that when converting from WebCore::Image* we use QPixmap::toImage(). If we&apos;re in the OpenGL graphicssystem, that would be an unnecessary bottleneck. Anyway we could use the standard QPixmap-&gt;texture conversions from QtOpenGL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192397</commentid>
    <comment_count>7</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-22 03:18:28 -0800</bug_when>
    <thetext>You mean texImage2D and texSubImage2D methods that take Image* parameter? I would actually go even more conservative for this initial patch on Qt WebGL support because those two functions are not usuall that frequently called in common OpenGL code. See this changeset in gitorious:

http://gitorious.org/webkit/jarkkos-webkit/commit/521a68ff041db6e72d52439ed9fd02481eafb672

What do you think? 

After this patch has been accepted with possible corrections I think it might be good idea to keep this implementation fairly conservative until possible issues on different targets have been fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192427</commentid>
    <comment_count>8</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-22 05:39:40 -0800</bug_when>
    <thetext>I&apos;m working on Fremantle fixes (see http://gitorious.org/~sakkinen/webkit/jarkkos-webkit). Review of this can wait until I get that escher demo succesfully running on N900 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192489</commentid>
    <comment_count>9</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-22 09:40:31 -0800</bug_when>
    <thetext>Sure - I&apos;m fine with keeping it traditional. Maybe some comments along the line of &quot;FIXME: This can be optimized when using the OpenGL paint-engine&quot; etc.
Same goes for beginPaint, by the way - if we&apos;re on a QGLWidget / opengl graphicssystem, we don&apos;t want to go through a QImage - but a FIXME comment at this stage is enough I think.

btw I&apos;m not a reviewer - just commenting :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192753</commentid>
    <comment_count>10</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-22 19:33:14 -0800</bug_when>
    <thetext>&gt; I&apos;m working on Fremantle fixes (see
&gt; http://gitorious.org/~sakkinen/webkit/jarkkos-webkit). Review of this can wait
&gt; until I get that escher demo succesfully running on N900 :)

In this case, it would be wise to clear the review flag until you want it to be reviewed again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192773</commentid>
    <comment_count>11</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-22 20:37:39 -0800</bug_when>
    <thetext>Git version now runs most of the WebGL tests on N900 but they need default precision to be appended (like precision mediump float;). Should there be default precision appended to the shader code if it isn&apos;t defined? On desktop, precision stuff must be of course parsed out before compiling the shader. This is also said in http://www.khronos.org/webgl/wiki/Testing/Conformance but it doesn&apos;t say anything what to do if precision isn&apos;t defined (like it isn&apos;t in most of the webgl examples).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192882</commentid>
    <comment_count>12</comment_count>
      <attachid>49277</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-23 04:49:53 -0800</bug_when>
    <thetext>Created attachment 49277
Qt WebGL support

Now works tested also on N900 and fixed issues on that platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192886</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-23 04:58:13 -0800</bug_when>
    <thetext>Attachment 49277 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/300462</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192891</commentid>
    <comment_count>14</comment_count>
      <attachid>49279</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-23 05:13:53 -0800</bug_when>
    <thetext>Created attachment 49279
Qt WebGL support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192897</commentid>
    <comment_count>15</comment_count>
      <attachid>49279</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-23 05:46:29 -0800</bug_when>
    <thetext>Comment on attachment 49279
Qt WebGL support


&gt; +
&gt; +typedef void (APIENTRY *glActiveTextureType) (GLenum);
&gt; +typedef void (APIENTRY *glAttachShaderType) (GLuint, GLuint);
&gt; +typedef void (APIENTRY *glBindAttribLocationType) (GLuint, GLuint, const char *);
&gt; +typedef void (APIENTRY *glBindBufferType) (GLenum, GLuint);

Lost of these have wrong coding style, like the * should be left aligned, thus:

+typedef void (APIENTRY* glBindAttribLocationType) (GLuint, GLuint, const char*)

We are pretty strict about coding style in WebKit, thus r-. Please make use of the tool check-webkit-style which can be found in WebKitTools/Scripts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192904</commentid>
    <comment_count>16</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-23 06:06:45 -0800</bug_when>
    <thetext>Forgot to run prepage-ChangeLog script :(  Sorry!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192906</commentid>
    <comment_count>17</comment_count>
      <attachid>49284</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-23 06:17:04 -0800</bug_when>
    <thetext>Created attachment 49284
Qt WebGL support

Forgot to add ChangeLog entry to previous patches, sorry!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192919</commentid>
    <comment_count>18</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-23 06:44:32 -0800</bug_when>
    <thetext>Note: apply change below if you want to try it out. See discussion in http://bugreports.qt.nokia.com/browse/QTWEBKIT-91 on accelerated compositing

##############################################################################
diff --git a/WebKit.pri b/WebKit.pri
index 907a92c..837ce67 100644
--- a/WebKit.pri
+++ b/WebKit.pri
@@ -49,7 +49,7 @@ building-libs {
     }
     DEPENDPATH += $$PWD/WebKit/qt/Api
 }
-greaterThan(QT_MINOR_VERSION, 5):DEFINES += WTF_USE_ACCELERATED_COMPOSITING
+#greaterThan(QT_MINOR_VERSION, 5):DEFINES += WTF_USE_ACCELERATED_COMPOSITING
 
 !mac:!unix|symbian {
     DEFINES += USE_SYSTEM_MALLOC
##############################################################################</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192958</commentid>
    <comment_count>19</comment_count>
      <attachid>49284</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-23 08:14:19 -0800</bug_when>
    <thetext>Comment on attachment 49284
Qt WebGL support

going to fix coding style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192976</commentid>
    <comment_count>20</comment_count>
      <attachid>49297</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-23 08:58:57 -0800</bug_when>
    <thetext>Created attachment 49297
Qt WebGL support

- Fixed reported style issue.
- Went through code manually to find more style issues (by looking at the style guide same time)
- Run check-webkit-style script</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193012</commentid>
    <comment_count>21</comment_count>
      <attachid>49302</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-23 10:32:57 -0800</bug_when>
    <thetext>Created attachment 49302
Qt WebGL support

Fixed whitespace style issues in ChangeLog files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193066</commentid>
    <comment_count>22</comment_count>
      <attachid>49302</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-23 12:10:47 -0800</bug_when>
    <thetext>Comment on attachment 49302
Qt WebGL support

I had a discussion with Jarkko on IRC and he is a.o updating the patch to make
use of a template for all calls similar to: 

#ifdef ...
enableVertexAttribArray =
reinterpret_cast&lt;glEnableVertexAttribArrayType&gt;(getProcAddress(ctx,
&quot;glEnableVertexAttribArray&quot;));
#else
enableVertexAttribArray = glEnableVertexAttribArray
#endif

that will simplify the code somewhat, as well as fixing coding styles issues
and the like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193284</commentid>
    <comment_count>23</comment_count>
      <attachid>49372</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-24 02:52:48 -0800</bug_when>
    <thetext>Created attachment 49372
Qt WebGL support

Style fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193303</commentid>
    <comment_count>24</comment_count>
      <attachid>49372</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-24 04:39:00 -0800</bug_when>
    <thetext>Comment on attachment 49372
Qt WebGL support

Please remove the changes to QGVLauncher as it is being removed. Also generally you should use webcore types inside webcore. 

I would also like you to use webcore logging instead of qWarning.

If you intend to land this through the commit queue, you need to remove the &apos;No new tests. (OOPS!)&apos; from the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193315</commentid>
    <comment_count>25</comment_count>
      <attachid>49381</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-24 05:23:30 -0800</bug_when>
    <thetext>Created attachment 49381
Qt WebGL support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193320</commentid>
    <comment_count>26</comment_count>
      <attachid>49381</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-24 05:42:10 -0800</bug_when>
    <thetext>Comment on attachment 49381
Qt WebGL support

Looks good! some final comments on IRC that you can fix if you would like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193325</commentid>
    <comment_count>27</comment_count>
      <attachid>49383</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-24 06:03:37 -0800</bug_when>
    <thetext>Created attachment 49383
Qt WebGL support

Final polishing of comments etc style :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193676</commentid>
    <comment_count>28</comment_count>
      <attachid>49475</attachid>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-25 04:53:41 -0800</bug_when>
    <thetext>Created attachment 49475
Qt WebGL support

- Fixed compiler warning: forgot to remove now unused local variable ctx
- Fixed compiler error on desktop compilation: GraphicsContext3D::DEPTH_COMPONENT24 -&gt; GraphicsContext3D::DEPTH_COMPONENT

NOTE: If WTF_USE_ACCELERATED_COMPOSITING is disabled the current qtwebkit master does not compile. Resolved this by following change (not included in this patch since this is not part of this):

diff --git a/WebCore/css/MediaQueryEvaluator.cpp b/WebCore/css/MediaQueryEvaluator.cpp
index 4963ed4..6864231 100644
--- a/WebCore/css/MediaQueryEvaluator.cpp
+++ b/WebCore/css/MediaQueryEvaluator.cpp
@@ -47,7 +47,7 @@
 #include &quot;PlatformScreen.h&quot;
 #include &lt;wtf/HashMap.h&gt;
 
-#if ENABLE(3D_RENDERING)
+#if ENABLE(3D_RENDERING) &amp;&amp; USE(ACCELERATED_COMPOSITING)
 #include &quot;RenderLayerCompositor.h&quot;
 #endif
 
@@ -472,10 +472,12 @@ static bool transform_3dMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* f
     bool returnValueIfNoParameter;
     int have3dRendering;
 
-#if ENABLE(3D_RENDERING)
+#if ENABLE(3D_RENDERING) 
     bool threeDEnabled = false;
+#if USE(ACCELERATED_COMPOSITING)
     if (RenderView* view = frame-&gt;contentRenderer())
         threeDEnabled = view-&gt;compositor()-&gt;hasAcceleratedCompositing();
+#endif
 
     returnValueIfNoParameter = threeDEnabled;
     have3dRendering = threeDEnabled ? 1 : 0;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193681</commentid>
    <comment_count>29</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2010-02-25 05:04:22 -0800</bug_when>
    <thetext>Changed test page to http://learningwebgl.com/lessons/lesson15/index.html
instead of http://wakaba.c3.cx/w/escher_droste.html because khronos specification says that only GLSL 1.0 should be supported [1].

[1] https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/WebGL-spec.html#4.4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193714</commentid>
    <comment_count>30</comment_count>
      <attachid>49475</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-25 07:07:03 -0800</bug_when>
    <thetext>Comment on attachment 49475
Qt WebGL support

Clearing flags on attachment: 49475

Committed r55235: &lt;http://trac.webkit.org/changeset/55235&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193715</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-25 07:07:10 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202547</commentid>
    <comment_count>32</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-03-22 09:30:58 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Created an attachment (id=49475) [details]
&gt; Qt WebGL support

Hi,
This change adds public API, but lacks documentation for QWebSettings::WebGLEnabled; it should have an entry under &quot;\enum QWebSettings::WebAttribute&quot; in qwebsettings.cpp with a description of what it does and what the default value is. Could you add it?
Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49078</attachid>
            <date>2010-02-19 07:32:36 -0800</date>
            <delta_ts>2010-02-23 05:13:53 -0800</delta_ts>
            <desc>WebGL support for QtWebKit</desc>
            <filename>qt-webgl-support.diff</filename>
            <type>text/plain</type>
            <size>72273</size>
            <attacher name="Jarkko Sakkinen">jarkko.sakkinen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9XZWJDb3JlL1dlYkNvcmUucHJpCmlu
ZGV4IGMxYjJlNWEuLjhiYzdkMTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMjgyLDggKzI4MiwxNyBAQCBJRExfQklORElOR1Mg
Kz0gXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaWRsIFwKICAgICBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlk
bCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9X
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5pZGwgXAorICAgIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRsIFwKICAg
ICBodG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJH
TFRleHR1cmUuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwg
XAogICAgIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRsIFwKICAgICBodG1s
L2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaWRsIFwKICAgICBodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkU2hvcnRBcnJheS5pZGwgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBy
byBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNGNiNDc5NC4uNDRjY2MxNyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yNjY2
LDYgKzI2NjYsODYgQEAgU09VUkNFUyArPSBcCiB9CiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVO
QUJMRV8zRF9DQU5WQVM9MSkgeworUVQgKz0gb3BlbmdsCitIRUFERVJTICs9IFwKKwliaW5kaW5n
cy9qcy9KU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dl
YkdMQXJyYXlIZWxwZXIuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVj
dG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IuaCBcCisJ
YmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMv
SlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWdu
ZWRJbnRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwlodG1sL2NhbnZhcy9DYW52YXNDb250ZXh0QXR0cmli
dXRlcy5oIFwKKwlodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xBY3RpdmVJbmZvLmggXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXlCdWZmZXIuaCBcCisJaHRt
bC9jYW52YXMvV2ViR0xBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oIFwKKwlo
dG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTENvbnRleHRB
dHRyaWJ1dGVzLmggXAorCWh0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5oIFwKKwlodG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdMR2V0SW5mby5oIFwK
KwlodG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oIFwKKwlodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCBcCisJ
aHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMVGV4dHVy
ZS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIFwKKwlodG1sL2NhbnZh
cy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJ
bnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oIFwKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIAorCitTT1VSQ0VTICs9IFwK
KwliaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRp
bmdzL2pzL0pTV2ViR0xBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRl
QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDdXN0
b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmNwcCBc
CisJYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9q
cy9KU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xJ
bnRBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5j
cHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGlu
Z3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5n
cy9qcy9KU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9K
U1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNX
ZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcCBcCisJaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0
dHJpYnV0ZXMuY3BwIFwKKyAgICBodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuY3BwIFwKKwlodG1s
L2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xBcnJheS5j
cHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xC
eXRlQXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCBc
CisJaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMR2V0SW5mby5jcHAgXAorCWh0bWwv
Y2FudmFzL1dlYkdMSW50QXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3Bw
IFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcCBc
CisJaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xU
ZXh0dXJlLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwIFwKKwlo
dG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xVbnNpZ25lZEludEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0
QXJyYXkuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcCBcCisKK30KKworCiBpbmNsdWRlKCQkUFdELy4uL1dlYktpdC9xdC9BcGkvaGVhZGVycy5w
cmkpCiBpbmNsdWRlKC4uL2luY2x1ZGUvUXRXZWJLaXQvY2xhc3NoZWFkZXJzLnByaSkKIEhFQURF
UlMgKz0gJCRXRUJLSVRfQVBJX0hFQURFUlMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAwYTQxZGM2Li5jZjFkZjcwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC00NCw2ICs0NCwxMyBA
QCB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7CiBjb25zdCAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBOdWxsUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCA9IDA7CiB0
eXBlZGVmIEdMdWludCBQbGF0Zm9ybTNET2JqZWN0OwogY29uc3QgUGxhdGZvcm0zRE9iamVjdCBO
dWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7CisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxR
dE9wZW5HTC9RdE9wZW5HTD4KKwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEOworY29uc3QgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgPSAwOwordHlwZWRlZiBpbnQgUGxhdGZvcm0zRE9iamVjdDsKK2NvbnN0IFBs
YXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3JtM0RPYmplY3QgPSAwOwogI2Vsc2UKIHR5cGVkZWYg
dm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsKIGNvbnN0ICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEID0gMDsKQEAgLTczLDcgKzgw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICAvLyBGSVhNRTogaWRlYWxs
eSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRmb3Jtcy4KLSNpZiBQTEFURk9STShDSFJP
TUlVTSkKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oUVQpCiAgICAgY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICNlbmRpZgogCkBAIC00MDksNiArNDE2LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0
OwogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OworI2Vs
aWYgUExBVEZPUk0oUVQpCisgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCgpOworICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3Jt
VGV4dHVyZSgpIGNvbnN0OwogI2Vsc2UKICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gTnVsbFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0Q7IH0KICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRl
eHR1cmUoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm0zRE9iamVjdDsgfQpAQCAtNzA0LDcg
KzcxNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZiAgICAgICAgCiAKICAgICAgICAg
Ly8gRklYTUU6IGlkZWFsbHkgdGhpcyB3b3VsZCBiZSB1c2VkIG9uIGFsbCBwbGF0Zm9ybXMuCi0j
aWYgUExBVEZPUk0oQ0hST01JVU0pCisjaWYgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JN
KFFUKQogICAgICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICAg
ICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+IG1faW50ZXJuYWw7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NWQxZGEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCkBAIC0wLDAgKzEsMTYxMSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTAgVGlldG8gQ29ycG9yYXRpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICAgICAKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkNhbnZhc09iamVjdC5oIgorI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZvLmgiCisjaW5jbHVkZSAi
V2ViR0xBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xG
cmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMRmxvYXRBcnJheS5oIgorI2luY2x1ZGUgIldl
YkdMSW50QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJH
TFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2Vi
R0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oIgorI2luY2x1
ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmbmRlZiBHTF9BUkJfdmVydGV4X2J1
ZmZlcl9vYmplY3QKK3R5cGVkZWYgcHRyZGlmZl90IEdMaW50cHRyOwordHlwZWRlZiBwdHJkaWZm
X3QgR0xzaXplaXB0cjsKKyNlbmRpZgorCisjaWZuZGVmIEFQSUVOVFJZCisjZGVmaW5lIEFQSUVO
VFJZCisjZW5kaWYKKwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xBY3RpdmVUZXh0dXJlVHlw
ZSkgKEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEF0dGFjaFNoYWRlclR5cGUp
IChHTHVpbnQsIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEJpbmRBdHRyaWJM
b2NhdGlvblR5cGUpIChHTHVpbnQsIEdMdWludCwgY29uc3QgY2hhciAqKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsQmluZEJ1ZmZlclR5cGUpIChHTGVudW0sIEdMdWludCk7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZICpnbEJpbmRGcmFtZWJ1ZmZlclR5cGUpIChHTGVudW0gdGFyZ2V0LCBH
THVpbnQgZnJhbWVidWZmZXIpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xCaW5kUHJvZ3Jh
bVR5cGUpIChHTGVudW0sIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEJpbmRS
ZW5kZXJidWZmZXJUeXBlKSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEJsZW5kQ29sb3JUeXBlKSAoR0xjbGFtcGYsIEdMY2xh
bXBmLCBHTGNsYW1wZiwgR0xjbGFtcGYpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xCbGVu
ZEVxdWF0aW9uU2VwYXJhdGVUeXBlKShHTGVudW0gbW9kZVJHQiwgR0xlbnVtIG1vZGVBbHBoYSk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEJsZW5kRnVuY1NlcGFyYXRlVHlwZSkoR0xlbnVt
CXNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEp
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xCdWZmZXJEYXRhVHlwZSkgKEdMZW51bSwgR0xz
aXplaXB0ciwgY29uc3QgR0x2b2lkICosIEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpnbEJ1ZmZlclN1YkRhdGFUeXBlKSAoR0xlbnVtLCBHTGludHB0ciwgR0xzaXplaXB0ciwgY29u
c3QgR0x2b2lkICopOwordHlwZWRlZiBHTGVudW0gKEFQSUVOVFJZICpnbENoZWNrRnJhbWVidWZm
ZXJTdGF0dXNUeXBlKSAoR0xlbnVtIHRhcmdldCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpn
bENvbXBpbGVTaGFkZXJUeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgR0x1aW50IChBUElFTlRSWSAq
Z2xDcmVhdGVQcm9ncmFtVHlwZSkgKCk7Cit0eXBlZGVmIEdMdWludCAoQVBJRU5UUlkgKmdsQ3Jl
YXRlU2hhZGVyVHlwZSkgKEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbERlbGV0
ZUJ1ZmZlcnNUeXBlKSAoR0xzaXplaSwgY29uc3QgR0x1aW50ICopOwordHlwZWRlZiB2b2lkIChB
UElFTlRSWSAqZ2xEZWxldGVGcmFtZWJ1ZmZlcnNUeXBlKSAoR0xzaXplaSBuLCBjb25zdCBHTHVp
bnQgKmZyYW1lYnVmZmVycyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbERlbGV0ZVByb2dy
YW1zVHlwZSkgKEdMc2l6ZWksIGNvbnN0IEdMdWludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsRGVsZXRlUHJvZ3JhbVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSAqZ2xEZWxldGVSZW5kZXJidWZmZXJzVHlwZSkgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICpy
ZW5kZXJidWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGVsZXRlU2hhZGVyVHlw
ZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbERldGFjaFNoYWRlclR5cGUp
IChHTHVpbnQsIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbERpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlclR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1
ZmZlcik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEVHlw
ZSkgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBH
THVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xH
ZW5CdWZmZXJzVHlwZSkgKEdMc2l6ZWksIEdMdWludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsR2VuZXJhdGVNaXBtYXBUeXBlKSAoR0xlbnVtIHRhcmdldCk7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZICpnbEdlbkZyYW1lYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIEdMdWludCAqZnJh
bWVidWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2VuUHJvZ3JhbXNUeXBlKSAo
R0xzaXplaSwgR0x1aW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZW5SZW5kZXJi
dWZmZXJzVHlwZSkgKEdMc2l6ZWkgbiwgR0x1aW50ICpyZW5kZXJidWZmZXJzKTsKK3R5cGVkZWYg
dm9pZCAoQVBJRU5UUlkgKmdsR2V0QWN0aXZlQXR0cmliVHlwZSkgKEdMdWludCBwcm9ncmFtLCBH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqIGxlbmd0aCwgR0xpbnQgKiBz
aXplLCBHTGVudW0gKiB0eXBlLCBHTGNoYXIgKiBuYW1lKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsR2V0QWN0aXZlVW5pZm9ybVR5cGUpIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4
LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKiBsZW5ndGgsIEdMaW50ICoJc2l6ZSwgR0xlbnVt
ICogdHlwZSwgR0xjaGFyICogbmFtZSk7Cit0eXBlZGVmIEdMaW50IChBUElFTlRSWSAqZ2xHZXRB
dHRyaWJMb2NhdGlvblR5cGUpIChHTHVpbnQsIGNvbnN0IGNoYXIgKik7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZICpnbEdldEJ1ZmZlclBhcmFtZXRlcml2VHlwZSkgKEdMZW51bSwgR0xlbnVtLCBH
TGludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0QnVmZmVyU3ViRGF0YVR5cGUp
IChHTGVudW0sIEdMaW50cHRyLCBHTHNpemVpcHRyLCBHTHZvaWQgKik7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZICpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2VHlwZSkgKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJh
bXMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRQcm9ncmFtSW5mb0xvZ1R5cGUpIChH
THVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkgKiwgY2hhciAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsR2V0UHJvZ3JhbWl2VHlwZSkgKEdMdWludCwgR0xlbnVtLCBHTGludCAqKTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZUeXBlKSAoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkgKmdsR2V0U2hhZGVySW5mb0xvZ1R5cGUpIChHTHVpbnQsIEdMc2l6ZWksIEdMc2l6
ZWkgKiwgY2hhciAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0U2hhZGVyaXZUeXBl
KSAoR0x1aW50LCBHTGVudW0sIEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xH
ZXRTaGFkZXJTb3VyY2VUeXBlKSAoR0x1aW50LCBHTHNpemVpLCBHTHNpemVpICosIGNoYXIgKik7
Cit0eXBlZGVmIEdMdWludCAoQVBJRU5UUlkgKmdsR2V0VW5pZm9ybUxvY2F0aW9uVHlwZSkgKEdM
dWludCwgY29uc3QgY2hhciopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRVbmlmb3Jt
ZnZUeXBlKSAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0ICogcGFyYW1z
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0VW5pZm9ybWl2VHlwZSkgKEdMdWludCBw
cm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQgKiBwYXJhbXMpOwordHlwZWRlZiB2b2lkIChB
UElFTlRSWSAqZ2xHZXRWZXJ0ZXhBdHRyaWJmdlR5cGUpIChHTHVpbnQgaW5kZXgsIEdMZW51bSBw
bmFtZSwgR0xmbG9hdCAqIHBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdldFZl
cnRleEF0dHJpYml2VHlwZSkgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCAqIHBh
cmFtcyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2
VHlwZSkgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQgKiogcG9pbnRlcik7Cit0
eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkgKmdsSXNCdWZmZXJUeXBlKSAoR0x1aW50IGJ1ZmZl
cik7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkgKmdsSXNGcmFtZWJ1ZmZlclR5cGUpIChH
THVpbnQgZnJhbWVidWZmZXIpOwordHlwZWRlZiBHTGJvb2xlYW4gKEFQSUVOVFJZICpnbElzUHJv
Z3JhbVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiBHTGJvb2xlYW4gKEFQSUVOVFJZICpnbElzUmVu
ZGVyYnVmZmVyVHlwZSkgKEdMdWludCByZW5kZXJidWZmZXIpOwordHlwZWRlZiBHTGJvb2xlYW4g
KEFQSUVOVFJZICpnbElzU2hhZGVyVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbExpbmtQcm9ncmFtVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VUeXBlKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZICpnbFNoYWRlclNvdXJjZVR5cGUpIChHTHVpbnQsIEdMc2l6ZWksIGNvbnN0IGNo
YXIgKiosIGNvbnN0IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xTdGVuY2ls
RnVuY1NlcGFyYXRlVHlwZSkgKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQJcmVmLCBH
THVpbnQJbWFzayk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFN0ZW5jaWxNYXNrU2VwYXJh
dGVUeXBlKSAoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsU3RlbmNpbE9wU2VwYXJhdGVUeXBlKSAoR0xlbnVtIGZhY2UsIEdMZW51bSBzZmFpbCwg
R0xlbnVtIGRwZmFpbCwgR0xlbnVtIGRwcGFzcyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpn
bFVuaWZvcm0xZlR5cGUpIChHTGludCwgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpnbFVuaWZvcm0xZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNvbnN0IEdMZmxvYXQgKik7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm0xaVR5cGUpIChHTGludCwgR0xpbnQpOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtMWl2VHlwZSkgKEdMaW50LCBHTHNpemVp
LCBjb25zdCBHTGludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTJmVHlw
ZSkgKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmds
VW5pZm9ybTJmdlR5cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTJpVHlwZSkgKEdMaW50LCBHTGludCwgR0xpbnQp
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtMml2VHlwZSkgKEdMaW50LCBHTHNp
emVpLCBjb25zdCBHTGludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTNm
VHlwZSkgKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkgKmdsVW5pZm9ybTNmdlR5cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xmbG9h
dCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTNpVHlwZSkgKEdMaW50LCBH
TGludCwgR0xpbnQsIEdMaW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTNp
dlR5cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZICpnbFVuaWZvcm00ZlR5cGUpIChHTGludCwgR0xmbG9hdCwgR0xmbG9hdCwgR0xmbG9h
dCwgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm00ZnZUeXBlKSAo
R0xpbnQsIEdMc2l6ZWksIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpnbFVuaWZvcm00aVR5cGUpIChHTGludCwgR0xpbnQsIEdMaW50LCBHTGludCwgR0xpbnQpOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtNGl2VHlwZSkgKEdMaW50LCBHTHNpemVp
LCBjb25zdCBHTGludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybU1hdHJp
eDJmdlR5cGUpIChHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0ICopOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtTWF0cml4MngzZnZUeXBlKSAoR0xpbnQs
IEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkgKmdsVW5pZm9ybU1hdHJpeDJ4NGZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBHTGJvb2xl
YW4sIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm1N
YXRyaXgzZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCAq
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybU1hdHJpeDN4MmZ2VHlwZSkgKEdM
aW50LCBHTHNpemVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZICpnbFVuaWZvcm1NYXRyaXgzeDRmdlR5cGUpIChHTGludCwgR0xzaXplaSwgR0xi
b29sZWFuLCBjb25zdCBHTGZsb2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlm
b3JtTWF0cml4NGZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxv
YXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm1NYXRyaXg0eDJmdlR5cGUp
IChHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0ICopOwordHlwZWRlZiB2
b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtTWF0cml4NHgzZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWks
IEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmds
VXNlUHJvZ3JhbVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xWYWxp
ZGF0ZVByb2dyYW1UeXBlKSAoR0x1aW50IHByb2dyYW0pOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSAqZ2xWZXJ0ZXhBdHRyaWIxZlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqZ2xWZXJ0ZXhBdHRyaWIxZnZUeXBlKSAoR0x1aW50LCBjb25zdCBH
TGZsb2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xWZXJ0ZXhBdHRyaWIyZlR5cGUp
IChHTHVpbnQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChB
UElFTlRSWSAqZ2xWZXJ0ZXhBdHRyaWIyZnZUeXBlKSAoR0x1aW50LCBjb25zdCBHTGZsb2F0ICop
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xWZXJ0ZXhBdHRyaWIzZlR5cGUpIChHTHVpbnQs
IGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxvYXQpOwordHlwZWRlZiB2
b2lkIChBUElFTlRSWSAqZ2xWZXJ0ZXhBdHRyaWIzZnZUeXBlKSAoR0x1aW50LCBjb25zdCBHTGZs
b2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xWZXJ0ZXhBdHRyaWI0ZlR5cGUpIChH
THVpbnQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0
IEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xWZXJ0ZXhBdHRyaWI0ZnZUeXBl
KSAoR0x1aW50LCBjb25zdCBHTGZsb2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xW
ZXJ0ZXhBdHRyaWJQb2ludGVyVHlwZSkgKEdMdWludCwgR0xpbnQsIEdMZW51bSwgR0xib29sZWFu
LCBHTHNpemVpLCBjb25zdCBHTHZvaWQgKik7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwgeworcHVibGljOgorCisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycyk7CisgICAgfkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwoKTsKKworICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIG1fdmFsaWQ7IH0KKworcHVi
bGljOgorCisJZ2xBY3RpdmVUZXh0dXJlVHlwZSBhY3RpdmVUZXh0dXJlOworCWdsQXR0YWNoU2hh
ZGVyVHlwZSBhdHRhY2hTaGFkZXI7CisJZ2xCaW5kQXR0cmliTG9jYXRpb25UeXBlIGJpbmRBdHRy
aWJMb2NhdGlvbjsKKyAgICBnbEJpbmRCdWZmZXJUeXBlIGJpbmRCdWZmZXI7CisJZ2xCaW5kRnJh
bWVidWZmZXJUeXBlIGJpbmRGcmFtZWJ1ZmZlcjsKKyAgICBnbEJpbmRQcm9ncmFtVHlwZSBiaW5k
UHJvZ3JhbTsKKwlnbEJpbmRSZW5kZXJidWZmZXJUeXBlIGJpbmRSZW5kZXJidWZmZXI7CisJZ2xC
bGVuZENvbG9yVHlwZSBibGVuZENvbG9yOworICAgIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlVHlw
ZSBibGVuZEVxdWF0aW9uU2VwYXJhdGU7CisgICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZVR5cGUgYmxl
bmRGdW5jU2VwYXJhdGU7CisgICAgZ2xCdWZmZXJEYXRhVHlwZSBidWZmZXJEYXRhOworICAgIGds
QnVmZmVyU3ViRGF0YVR5cGUgYnVmZmVyU3ViRGF0YTsKKwlnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXNUeXBlIGNoZWNrRnJhbWVidWZmZXJTdGF0dXM7CisgICAgZ2xDb21waWxlU2hhZGVyVHlwZSBj
b21waWxlU2hhZGVyOworCWdsQ3JlYXRlUHJvZ3JhbVR5cGUgY3JlYXRlUHJvZ3JhbTsKKyAgICBn
bENyZWF0ZVNoYWRlclR5cGUgY3JlYXRlU2hhZGVyOworICAgIGdsRGVsZXRlQnVmZmVyc1R5cGUg
ZGVsZXRlQnVmZmVyczsKKwlnbERlbGV0ZUZyYW1lYnVmZmVyc1R5cGUgZGVsZXRlRnJhbWVidWZm
ZXJzOworICAgIGdsRGVsZXRlUHJvZ3JhbXNUeXBlIGRlbGV0ZVByb2dyYW1zOworCWdsRGVsZXRl
UHJvZ3JhbVR5cGUgZGVsZXRlUHJvZ3JhbTsKKwlnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlIGRl
bGV0ZVJlbmRlcmJ1ZmZlcnM7CisgICAgZ2xEZWxldGVTaGFkZXJUeXBlIGRlbGV0ZVNoYWRlcjsK
KwlnbERldGFjaFNoYWRlclR5cGUgZGV0YWNoU2hhZGVyOworCWdsRGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5VHlwZSBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXk7CisJZ2xFbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheVR5cGUgZW5hYmxlVmVydGV4QXR0cmliQXJyYXk7CisJZ2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlclR5cGUgZnJhbWVidWZmZXJSZW5kZXJidWZmZXI7CisJZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRFR5cGUgZnJhbWVidWZmZXJUZXh0dXJlMkQ7CisgICAgZ2xHZW5CdWZmZXJzVHlwZSBnZW5C
dWZmZXJzOworCWdsR2VuZXJhdGVNaXBtYXBUeXBlIGdlbmVyYXRlTWlwbWFwOworCWdsR2VuRnJh
bWVidWZmZXJzVHlwZSBnZW5GcmFtZWJ1ZmZlcnM7CisgICAgZ2xHZW5Qcm9ncmFtc1R5cGUgZ2Vu
UHJvZ3JhbXM7CisJZ2xHZW5SZW5kZXJidWZmZXJzVHlwZSBnZW5SZW5kZXJidWZmZXJzOworICAg
IGdsR2V0QWN0aXZlQXR0cmliVHlwZSBnZXRBY3RpdmVBdHRyaWI7CisgICAgZ2xHZXRBY3RpdmVV
bmlmb3JtVHlwZSBnZXRBY3RpdmVVbmlmb3JtOworCWdsR2V0QXR0cmliTG9jYXRpb25UeXBlIGdl
dEF0dHJpYkxvY2F0aW9uOworICAgIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXZUeXBlIGdldEJ1ZmZl
clBhcmFtZXRlcml2OworICAgIGdsR2V0QnVmZmVyU3ViRGF0YVR5cGUgZ2V0QnVmZmVyU3ViRGF0
YTsKKwlnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2VHlwZSBnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdjsKKwlnbEdldFByb2dyYW1JbmZvTG9nVHlwZSBnZXRQ
cm9ncmFtSW5mb0xvZzsKKwlnbEdldFByb2dyYW1pdlR5cGUgZ2V0UHJvZ3JhbWl2OworCWdsR2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZUeXBlIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2Owor
CWdsR2V0U2hhZGVySW5mb0xvZ1R5cGUgZ2V0U2hhZGVySW5mb0xvZzsKKwlnbEdldFNoYWRlcml2
VHlwZSBnZXRTaGFkZXJpdjsKKwlnbEdldFNoYWRlclNvdXJjZVR5cGUgZ2V0U2hhZGVyU291cmNl
OworICAgIGdsR2V0VW5pZm9ybWZ2VHlwZSBnZXRVbmlmb3JtZnY7CisgICAgZ2xHZXRVbmlmb3Jt
aXZUeXBlIGdldFVuaWZvcm1pdjsKKwlnbEdldFVuaWZvcm1Mb2NhdGlvblR5cGUgZ2V0VW5pZm9y
bUxvY2F0aW9uOworICAgIGdsR2V0VmVydGV4QXR0cmliZnZUeXBlIGdldFZlcnRleEF0dHJpYmZ2
OworICAgIGdsR2V0VmVydGV4QXR0cmliaXZUeXBlIGdldFZlcnRleEF0dHJpYml2OworCWdsR2V0
VmVydGV4QXR0cmliUG9pbnRlcnZUeXBlIGdldFZlcnRleEF0dHJpYlBvaW50ZXJ2OworICAgIGds
SXNCdWZmZXJUeXBlIGlzQnVmZmVyOworCWdsSXNGcmFtZWJ1ZmZlclR5cGUgaXNGcmFtZWJ1ZmZl
cjsKKwlnbElzUHJvZ3JhbVR5cGUgaXNQcm9ncmFtOworCWdsSXNSZW5kZXJidWZmZXJUeXBlIGlz
UmVuZGVyYnVmZmVyOworCWdsSXNTaGFkZXJUeXBlIGlzU2hhZGVyOworCWdsTGlua1Byb2dyYW1U
eXBlIGxpbmtQcm9ncmFtOworCWdsUmVuZGVyYnVmZmVyU3RvcmFnZVR5cGUgcmVuZGVyYnVmZmVy
U3RvcmFnZTsKKyAgICBnbFNoYWRlclNvdXJjZVR5cGUgc2hhZGVyU291cmNlOworICAgIGdsU3Rl
bmNpbEZ1bmNTZXBhcmF0ZVR5cGUgc3RlbmNpbEZ1bmNTZXBhcmF0ZTsKKyAgICBnbFN0ZW5jaWxN
YXNrU2VwYXJhdGVUeXBlIHN0ZW5jaWxNYXNrU2VwYXJhdGU7CisJZ2xTdGVuY2lsT3BTZXBhcmF0
ZVR5cGUgc3RlbmNpbE9wU2VwYXJhdGU7CisJZ2xVbmlmb3JtMWZUeXBlIHVuaWZvcm0xZjsKKwln
bFVuaWZvcm0xZnZUeXBlIHVuaWZvcm0xZnY7CisJZ2xVbmlmb3JtMWlUeXBlIHVuaWZvcm0xaTsK
KwlnbFVuaWZvcm0xaXZUeXBlIHVuaWZvcm0xaXY7CisJZ2xVbmlmb3JtMmZUeXBlIHVuaWZvcm0y
ZjsKKwlnbFVuaWZvcm0yZnZUeXBlIHVuaWZvcm0yZnY7CisJZ2xVbmlmb3JtMmlUeXBlIHVuaWZv
cm0yaTsKKwlnbFVuaWZvcm0yaXZUeXBlIHVuaWZvcm0yaXY7CisJZ2xVbmlmb3JtM2ZUeXBlIHVu
aWZvcm0zZjsKKwlnbFVuaWZvcm0zZnZUeXBlIHVuaWZvcm0zZnY7CisJZ2xVbmlmb3JtM2lUeXBl
IHVuaWZvcm0zaTsKKwlnbFVuaWZvcm0zaXZUeXBlIHVuaWZvcm0zaXY7CisJZ2xVbmlmb3JtNGZU
eXBlIHVuaWZvcm00ZjsKKwlnbFVuaWZvcm00ZnZUeXBlIHVuaWZvcm00ZnY7CisJZ2xVbmlmb3Jt
NGlUeXBlIHVuaWZvcm00aTsKKwlnbFVuaWZvcm00aXZUeXBlIHVuaWZvcm00aXY7CisJZ2xVbmlm
b3JtTWF0cml4MmZ2VHlwZSB1bmlmb3JtTWF0cml4MmZ2OworCWdsVW5pZm9ybU1hdHJpeDJ4M2Z2
VHlwZSB1bmlmb3JtTWF0cml4MngzZnY7CisJZ2xVbmlmb3JtTWF0cml4Mng0ZnZUeXBlIHVuaWZv
cm1NYXRyaXgyeDRmdjsKKwlnbFVuaWZvcm1NYXRyaXgzZnZUeXBlIHVuaWZvcm1NYXRyaXgzZnY7
CisJZ2xVbmlmb3JtTWF0cml4M3gyZnZUeXBlIHVuaWZvcm1NYXRyaXgzeDJmdjsKKwlnbFVuaWZv
cm1NYXRyaXgzeDRmdlR5cGUgdW5pZm9ybU1hdHJpeDN4NGZ2OworCWdsVW5pZm9ybU1hdHJpeDRm
dlR5cGUgdW5pZm9ybU1hdHJpeDRmdjsKKwlnbFVuaWZvcm1NYXRyaXg0eDJmdlR5cGUgdW5pZm9y
bU1hdHJpeDR4MmZ2OworCWdsVW5pZm9ybU1hdHJpeDR4M2Z2VHlwZSB1bmlmb3JtTWF0cml4NHgz
ZnY7CisJZ2xVc2VQcm9ncmFtVHlwZSB1c2VQcm9ncmFtOworICAgIGdsVmFsaWRhdGVQcm9ncmFt
VHlwZSB2YWxpZGF0ZVByb2dyYW07CisJZ2xWZXJ0ZXhBdHRyaWIxZlR5cGUgdmVydGV4QXR0cmli
MWY7CisJZ2xWZXJ0ZXhBdHRyaWIxZnZUeXBlIHZlcnRleEF0dHJpYjFmdjsKKwlnbFZlcnRleEF0
dHJpYjJmVHlwZSB2ZXJ0ZXhBdHRyaWIyZjsKKwlnbFZlcnRleEF0dHJpYjJmdlR5cGUgdmVydGV4
QXR0cmliMmZ2OworCWdsVmVydGV4QXR0cmliM2ZUeXBlIHZlcnRleEF0dHJpYjNmOworCWdsVmVy
dGV4QXR0cmliM2Z2VHlwZSB2ZXJ0ZXhBdHRyaWIzZnY7CisJZ2xWZXJ0ZXhBdHRyaWI0ZlR5cGUg
dmVydGV4QXR0cmliNGY7CisJZ2xWZXJ0ZXhBdHRyaWI0ZnZUeXBlIHZlcnRleEF0dHJpYjRmdjsK
KwlnbFZlcnRleEF0dHJpYlBvaW50ZXJUeXBlIHZlcnRleEF0dHJpYlBvaW50ZXI7CisKK3B1Ymxp
YzoKKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cnM7CisgICAgUUdM
V2lkZ2V0KiBtX2dsV2lkZ2V0OworICAgIEdMdWludCBtX3RleHR1cmU7CisgICAgR0x1aW50IG1f
bWFpbkZibzsKKyAgICBHTHVpbnQgbV9jdXJyZW50RmJvOworICAgIEdMdWludCBtX2RlcHRoQnVm
ZmVyOworICAgIFFJbWFnZSBtX3BpeGVsczsKKyAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25n
PiBtX3N5bnRoZXRpY0Vycm9yczsKKworcHJpdmF0ZToKKworICAgIHZvaWQqIGdldFByb2NBZGRy
ZXNzKGNvbnN0IFFHTENvbnRleHQqIGN0eCwgY29uc3QgUVN0cmluZyYgcHJvYyk7CisKK3ByaXZh
dGU6CisKKyAgICBib29sIG1fdmFsaWQ7Cit9OworCitHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzKQorICAgIDogbV9hdHRycyhhdHRycykKKyAgICAsIG1fZ2xXaWRnZXQoMCkKKyAgICAs
IG1fdGV4dHVyZSgwKQorICAgICwgbV9tYWluRmJvKDApCisgICAgLCBtX2N1cnJlbnRGYm8oMCkK
KyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fdmFsaWQodHJ1ZSkKK3sKKyAgICBtX2F0
dHJzLmFscGhhID0gdHJ1ZTsKKyAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICBtX2F0dHJz
LnN0ZW5jaWwgPSBmYWxzZTsKKyAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIG1f
YXR0cnMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKKworICAgIFFHTEZvcm1hdCBmb3JtYXQ7
CisKKyAgICBmb3JtYXQuc2V0RGVwdGgodHJ1ZSk7CisgICAgZm9ybWF0LnNldFNhbXBsZUJ1ZmZl
cnModHJ1ZSk7CisgICAgZm9ybWF0LnNldFN0ZW5jaWwoZmFsc2UpOworCisgICAgbV9nbFdpZGdl
dCA9IG5ldyBRR0xXaWRnZXQoZm9ybWF0KTsKKyAgICBpZiAoIW1fZ2xXaWRnZXQtPmlzVmFsaWQo
KSkgeworICAgICAgICBxV2FybmluZygiR3JhcGhpY3NDb250ZXh0M0Q6IFFHTFdpZGdldCBkb2Vz
IG5vdCBoYXZlIGEgdmFsaWQgY29udGV4dCIpOworICAgICAgICBtX3ZhbGlkID0gZmFsc2U7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
CisgICAgY29uc3QgUUdMQ29udGV4dCogY3R4ID0gbV9nbFdpZGdldC0+Y29udGV4dCgpOworCisg
ICAgYWN0aXZlVGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xBY3RpdmVUZXh0dXJlVHlwZT4o
Z2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xBY3RpdmVUZXh0dXJlIikpOworICAgIGF0dGFjaFNoYWRl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xBdHRhY2hTaGFkZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhj
dHgsICJnbEF0dGFjaFNoYWRlciIpKTsKKyAgICBiaW5kQXR0cmliTG9jYXRpb24gPSByZWludGVy
cHJldF9jYXN0PGdsQmluZEF0dHJpYkxvY2F0aW9uVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAi
Z2xCaW5kQXR0cmliTG9jYXRpb24iKSk7CisgICAgYmluZEJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Z2xCaW5kQnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCaW5kQnVmZmVyIikp
OworICAgIGJpbmRGcmFtZWJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCaW5kRnJhbWVidWZm
ZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJpbmRGcmFtZWJ1ZmZlciIpKTsKKyAgICBi
aW5kUHJvZ3JhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCaW5kUHJvZ3JhbVR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsQmluZFByb2dyYW0iKSk7CisgICAgYmluZFJlbmRlcmJ1ZmZlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xCaW5kUmVuZGVyYnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xCaW5kUmVuZGVyYnVmZmVyIikpOworICAgIGJsZW5kQ29sb3IgPSByZWludGVycHJldF9j
YXN0PGdsQmxlbmRDb2xvclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQmxlbmRDb2xvciIp
KTsKKyAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUgPSByZWludGVycHJldF9jYXN0PGdsQmxlbmRF
cXVhdGlvblNlcGFyYXRlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCbGVuZEVxdWF0aW9u
U2VwYXJhdGUiKSk7CisgICAgYmxlbmRGdW5jU2VwYXJhdGUgPSByZWludGVycHJldF9jYXN0PGds
QmxlbmRGdW5jU2VwYXJhdGVUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJsZW5kRnVuY1Nl
cGFyYXRlIikpOworICAgIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PGdsQnVmZmVyRGF0
YVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQnVmZmVyRGF0YSIpKTsKKyAgICBidWZmZXJT
dWJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxnbEJ1ZmZlclN1YkRhdGFUeXBlPihnZXRQcm9jQWRk
cmVzcyhjdHgsICJnbEJ1ZmZlclN1YkRhdGEiKSk7CisgICAgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzVHlwZT4oZ2V0UHJv
Y0FkZHJlc3MoY3R4LCAiZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzIikpOworICAgIGNvbXBpbGVT
aGFkZXIgPSByZWludGVycHJldF9jYXN0PGdsQ29tcGlsZVNoYWRlclR5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsQ29tcGlsZVNoYWRlciIpKTsKKyAgICBjcmVhdGVQcm9ncmFtID0gcmVpbnRl
cnByZXRfY2FzdDxnbENyZWF0ZVByb2dyYW1UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbENy
ZWF0ZVByb2dyYW0iKSk7CisgICAgY3JlYXRlU2hhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbENy
ZWF0ZVNoYWRlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQ3JlYXRlU2hhZGVyIikpOwor
ICAgIGRlbGV0ZUJ1ZmZlcnMgPSByZWludGVycHJldF9jYXN0PGdsRGVsZXRlQnVmZmVyc1R5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsRGVsZXRlQnVmZmVycyIpKTsKKyAgICBkZWxldGVGcmFt
ZWJ1ZmZlcnMgPSByZWludGVycHJldF9jYXN0PGdsRGVsZXRlRnJhbWVidWZmZXJzVHlwZT4oZ2V0
UHJvY0FkZHJlc3MoY3R4LCAiZ2xEZWxldGVGcmFtZWJ1ZmZlcnMiKSk7CisgICAgZGVsZXRlUHJv
Z3JhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxldGVQcm9ncmFtVHlwZT4oZ2V0UHJvY0FkZHJl
c3MoY3R4LCAiZ2xEZWxldGVQcm9ncmFtIikpOworICAgIGRlbGV0ZVByb2dyYW1zID0gcmVpbnRl
cnByZXRfY2FzdDxnbERlbGV0ZVByb2dyYW1zVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xE
ZWxldGVQcm9ncmFtcyIpKTsKKyAgICBkZWxldGVSZW5kZXJidWZmZXJzID0gcmVpbnRlcnByZXRf
Y2FzdDxnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMiKSk7CisgICAgZGVsZXRlU2hhZGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxnbERlbGV0ZVNoYWRlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsRGVsZXRlU2hhZGVy
IikpOworICAgIGRldGFjaFNoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZXRhY2hTaGFkZXJU
eXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERldGFjaFNoYWRlciIpKTsKKyAgICBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkgPSByZWludGVycHJldF9jYXN0PGdsRGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkiKSk7CisgICAgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkgPSByZWludGVycHJldF9jYXN0PGds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXlUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5IikpOworICAgIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyID0gcmVp
bnRlcnByZXRfY2FzdDxnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJl
c3MoY3R4LCAiZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIpKTsKKyAgICBmcmFtZWJ1ZmZlclRl
eHR1cmUyRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRFR5cGU+KGdl
dFByb2NBZGRyZXNzKGN0eCwgImdsRnJhbWVidWZmZXJUZXh0dXJlMkQiKSk7CisgICAgZ2VuQnVm
ZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZW5CdWZmZXJzVHlwZT4oZ2V0UHJvY0FkZHJlc3Mo
Y3R4LCAiZ2xHZW5CdWZmZXJzIikpOworICAgIGdlbmVyYXRlTWlwbWFwID0gcmVpbnRlcnByZXRf
Y2FzdDxnbEdlbmVyYXRlTWlwbWFwVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZW5lcmF0
ZU1pcG1hcCIpKTsKKyAgICBnZW5GcmFtZWJ1ZmZlcnMgPSByZWludGVycHJldF9jYXN0PGdsR2Vu
RnJhbWVidWZmZXJzVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZW5GcmFtZWJ1ZmZlcnMi
KSk7CisgICAgZ2VuUHJvZ3JhbXMgPSByZWludGVycHJldF9jYXN0PGdsR2VuUHJvZ3JhbXNUeXBl
PihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdlblByb2dyYW1zIikpOworICAgIGdlblJlbmRlcmJ1
ZmZlcnMgPSByZWludGVycHJldF9jYXN0PGdsR2VuUmVuZGVyYnVmZmVyc1R5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsR2VuUmVuZGVyYnVmZmVycyIpKTsKKyAgICBnZXRBY3RpdmVBdHRyaWIg
PSByZWludGVycHJldF9jYXN0PGdsR2V0QWN0aXZlQXR0cmliVHlwZT4oZ2V0UHJvY0FkZHJlc3Mo
Y3R4LCAiZ2xHZXRBY3RpdmVBdHRyaWIiKSk7CisgICAgZ2V0QWN0aXZlVW5pZm9ybSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xHZXRBY3RpdmVVbmlmb3JtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAi
Z2xHZXRBY3RpdmVVbmlmb3JtIikpOworICAgIGdldEF0dHJpYkxvY2F0aW9uID0gcmVpbnRlcnBy
ZXRfY2FzdDxnbEdldEF0dHJpYkxvY2F0aW9uVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xH
ZXRBdHRyaWJMb2NhdGlvbiIpKTsKKyAgICBnZXRCdWZmZXJQYXJhbWV0ZXJpdiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwg
ImdsR2V0QnVmZmVyUGFyYW1ldGVyaXYiKSk7CisgICAgZ2V0QnVmZmVyU3ViRGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xHZXRCdWZmZXJTdWJEYXRhVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAi
Z2xHZXRCdWZmZXJTdWJEYXRhIikpOworICAgIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpdiIpKTsKKyAgICBnZXRQcm9ncmFtSW5mb0xvZyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Z2xHZXRQcm9ncmFtSW5mb0xvZ1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0UHJv
Z3JhbUluZm9Mb2ciKSk7CisgICAgZ2V0UHJvZ3JhbWl2ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdl
dFByb2dyYW1pdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0UHJvZ3JhbWl2IikpOwor
ICAgIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdiIpKTsKKyAgICBnZXRTaGFkZXJJbmZvTG9nID0gcmVpbnRlcnBy
ZXRfY2FzdDxnbEdldFNoYWRlckluZm9Mb2dUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdl
dFNoYWRlckluZm9Mb2ciKSk7CisgICAgZ2V0U2hhZGVyaXYgPSByZWludGVycHJldF9jYXN0PGds
R2V0U2hhZGVyaXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldFNoYWRlcml2IikpOwor
ICAgIGdldFNoYWRlclNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRTaGFkZXJTb3VyY2VU
eXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldFNoYWRlclNvdXJjZSIpKTsKKyAgICBnZXRV
bmlmb3JtZnYgPSByZWludGVycHJldF9jYXN0PGdsR2V0VW5pZm9ybWZ2VHlwZT4oZ2V0UHJvY0Fk
ZHJlc3MoY3R4LCAiZ2xHZXRVbmlmb3JtZnYiKSk7CisgICAgZ2V0VW5pZm9ybWl2ID0gcmVpbnRl
cnByZXRfY2FzdDxnbEdldFVuaWZvcm1pdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0
VW5pZm9ybWl2IikpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Z2xHZXRVbmlmb3JtTG9jYXRpb25UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldFVuaWZv
cm1Mb2NhdGlvbiIpKTsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Z2xHZXRWZXJ0ZXhBdHRyaWJmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0VmVydGV4
QXR0cmliZnYiKSk7CisgICAgZ2V0VmVydGV4QXR0cmliaXYgPSByZWludGVycHJldF9jYXN0PGds
R2V0VmVydGV4QXR0cmliaXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldFZlcnRleEF0
dHJpYml2IikpOworICAgIGdldFZlcnRleEF0dHJpYlBvaW50ZXJ2ID0gcmVpbnRlcnByZXRfY2Fz
dDxnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xH
ZXRWZXJ0ZXhBdHRyaWJQb2ludGVydiIpKTsKKyAgICBpc0J1ZmZlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Z2xJc0J1ZmZlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsSXNCdWZmZXIiKSk7Cisg
ICAgaXNGcmFtZWJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xJc0ZyYW1lYnVmZmVyVHlwZT4o
Z2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xJc0ZyYW1lYnVmZmVyIikpOworICAgIGlzUHJvZ3JhbSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xJc1Byb2dyYW1UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJn
bElzUHJvZ3JhbSIpKTsKKyAgICBpc1JlbmRlcmJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xJ
c1JlbmRlcmJ1ZmZlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsSXNSZW5kZXJidWZmZXIi
KSk7CisgICAgaXNTaGFkZXIgPSByZWludGVycHJldF9jYXN0PGdsSXNTaGFkZXJUeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbElzU2hhZGVyIikpOworICAgIGxpbmtQcm9ncmFtID0gcmVpbnRl
cnByZXRfY2FzdDxnbExpbmtQcm9ncmFtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xMaW5r
UHJvZ3JhbSIpKTsKKyAgICByZW5kZXJidWZmZXJTdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2UiKSk7CisgICAgc2hhZGVyU291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxnbFNo
YWRlclNvdXJjZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsU2hhZGVyU291cmNlIikpOwor
ICAgIHN0ZW5jaWxGdW5jU2VwYXJhdGUgPSByZWludGVycHJldF9jYXN0PGdsU3RlbmNpbEZ1bmNT
ZXBhcmF0ZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSIp
KTsKKyAgICBzdGVuY2lsTWFza1NlcGFyYXRlID0gcmVpbnRlcnByZXRfY2FzdDxnbFN0ZW5jaWxN
YXNrU2VwYXJhdGVUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFN0ZW5jaWxNYXNrU2VwYXJh
dGUiKSk7CisgICAgc3RlbmNpbE9wU2VwYXJhdGUgPSByZWludGVycHJldF9jYXN0PGdsU3RlbmNp
bE9wU2VwYXJhdGVUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFN0ZW5jaWxPcFNlcGFyYXRl
IikpOworICAgIHVuaWZvcm0xZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtMWZUeXBlPihn
ZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0xZiIpKTsKKyAgICB1bmlmb3JtMWZ2ID0gcmVp
bnRlcnByZXRfY2FzdDxnbFVuaWZvcm0xZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVu
aWZvcm0xZnYiKSk7CisgICAgdW5pZm9ybTFpID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0x
aVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTFpIikpOworICAgIHVuaWZvcm0x
aXYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTFpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0
eCwgImdsVW5pZm9ybTFpdiIpKTsKKyAgICB1bmlmb3JtMmYgPSByZWludGVycHJldF9jYXN0PGds
VW5pZm9ybTJmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMmYiKSk7CisgICAg
dW5pZm9ybTJmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtMmZ2VHlwZT4oZ2V0UHJvY0Fk
ZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMmZ2IikpOworICAgIHVuaWZvcm0yaSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xVbmlmb3JtMmlUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0yaSIp
KTsKKyAgICB1bmlmb3JtMml2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0yaXZUeXBlPihn
ZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0yaXYiKSk7CisgICAgdW5pZm9ybTNmID0gcmVp
bnRlcnByZXRfY2FzdDxnbFVuaWZvcm0zZlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5p
Zm9ybTNmIikpOworICAgIHVuaWZvcm0zZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTNm
dlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTNmdiIpKTsKKyAgICB1bmlmb3Jt
M2kgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTNpVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xVbmlmb3JtM2kiKSk7CisgICAgdW5pZm9ybTNpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xV
bmlmb3JtM2l2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtM2l2IikpOworICAg
IHVuaWZvcm00ZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtNGZUeXBlPihnZXRQcm9jQWRk
cmVzcyhjdHgsICJnbFVuaWZvcm00ZiIpKTsKKyAgICB1bmlmb3JtNGZ2ID0gcmVpbnRlcnByZXRf
Y2FzdDxnbFVuaWZvcm00ZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm00ZnYi
KSk7CisgICAgdW5pZm9ybTRpID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm00aVR5cGU+KGdl
dFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTRpIikpOworICAgIHVuaWZvcm00aXYgPSByZWlu
dGVycHJldF9jYXN0PGdsVW5pZm9ybTRpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5p
Zm9ybTRpdiIpKTsKKyAgICB1bmlmb3JtTWF0cml4MmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVu
aWZvcm1NYXRyaXgyZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm1NYXRyaXgy
ZnYiKSk7CisgICAgdW5pZm9ybU1hdHJpeDJ4M2Z2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZv
cm1NYXRyaXgyeDNmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJpeDJ4
M2Z2IikpOworICAgIHVuaWZvcm1NYXRyaXgyeDRmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlm
b3JtTWF0cml4Mng0ZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm1NYXRyaXgy
eDRmdiIpKTsKKyAgICB1bmlmb3JtTWF0cml4M2Z2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZv
cm1NYXRyaXgzZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm1NYXRyaXgzZnYi
KSk7CisgICAgdW5pZm9ybU1hdHJpeDN4MmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm1N
YXRyaXgzeDJmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJpeDN4MmZ2
IikpOworICAgIHVuaWZvcm1NYXRyaXgzeDRmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3Jt
TWF0cml4M3g0ZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm1NYXRyaXgzeDRm
diIpKTsKKyAgICB1bmlmb3JtTWF0cml4NGZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm1N
YXRyaXg0ZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm1NYXRyaXg0ZnYiKSk7
CisgICAgdW5pZm9ybU1hdHJpeDR4MmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm1NYXRy
aXg0eDJmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJpeDR4MmZ2Iikp
OworICAgIHVuaWZvcm1NYXRyaXg0eDNmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtTWF0
cml4NHgzZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm1NYXRyaXg0eDNmdiIp
KTsKKyAgICB1c2VQcm9ncmFtID0gcmVpbnRlcnByZXRfY2FzdDxnbFVzZVByb2dyYW1UeXBlPihn
ZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVzZVByb2dyYW0iKSk7CisgICAgdmFsaWRhdGVQcm9ncmFt
ID0gcmVpbnRlcnByZXRfY2FzdDxnbFZhbGlkYXRlUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsVmFsaWRhdGVQcm9ncmFtIikpOworICAgIHZlcnRleEF0dHJpYjFmID0gcmVpbnRl
cnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjFmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xW
ZXJ0ZXhBdHRyaWIxZiIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWIxZnYgPSByZWludGVycHJldF9jYXN0
PGdsVmVydGV4QXR0cmliMWZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xWZXJ0ZXhBdHRy
aWIxZnYiKSk7CisgICAgdmVydGV4QXR0cmliMmYgPSByZWludGVycHJldF9jYXN0PGdsVmVydGV4
QXR0cmliMmZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjJmIikpOwor
ICAgIHZlcnRleEF0dHJpYjJmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRyaWIyZnZU
eXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjJmdiIpKTsKKyAgICB2ZXJ0
ZXhBdHRyaWIzZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRyaWIzZlR5cGU+KGdldFBy
b2NBZGRyZXNzKGN0eCwgImdsVmVydGV4QXR0cmliM2YiKSk7CisgICAgdmVydGV4QXR0cmliM2Z2
ID0gcmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjNmdlR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsVmVydGV4QXR0cmliM2Z2IikpOworICAgIHZlcnRleEF0dHJpYjRmID0gcmVpbnRl
cnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjRmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xW
ZXJ0ZXhBdHRyaWI0ZiIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWI0ZnYgPSByZWludGVycHJldF9jYXN0
PGdsVmVydGV4QXR0cmliNGZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xWZXJ0ZXhBdHRy
aWI0ZnYiKSk7CisgICAgdmVydGV4QXR0cmliUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xW
ZXJ0ZXhBdHRyaWJQb2ludGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xWZXJ0ZXhBdHRy
aWJQb2ludGVyIikpOworCisgICAgaWYgKCFtX3ZhbGlkKSB7CisgICAgICAgIHFXYXJuaW5nKCJH
cmFwaGljc0NvbnRleHQzRDogQWxsIG5lZWRlZCBPcGVuR0wgZXh0ZW5zaW9ucyBhcmUgbm90IGF2
YWlsYWJsZSIpOworICAgICAgICBtX3ZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFy
YW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7
CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4SW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwLCBHTF9SR0JBLCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworCisgICAgZ2VuRnJh
bWVidWZmZXJzKDEsICZtX21haW5GYm8pOworICAgIG1fY3VycmVudEZibyA9IG1fbWFpbkZibzsK
KworICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
bWFpbkZibyk7CisKKyAgICBnZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAg
ICBiaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVw
dGhCdWZmZXIpOworICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5ULCAxLCAxKTsKKyAgICBiaW5kUmVuZGVyYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworIAorICAgIGZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwor
ICAgIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAgIGdsQ2xlYXJDb2xvcigwLCAwLCAw
LCAwKTsKKworICAgIGlmIChjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRF
KSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4dDNEOiBJbnZhbGlkIEZC
TyI7CisgICAgICAgIG1fdmFsaWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK0dyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkKK3sKKyAgICBkZWxldGUg
bV9nbFdpZGdldDsKKyAgICBtX2dsV2lkZ2V0ID0gMDsKK30KKwordm9pZCogR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvY0FkZHJlc3MoY29uc3QgUUdMQ29udGV4dCogY3R4LCBjb25z
dCBRU3RyaW5nJiBwcm9jKQoreworICAgIFFTdHJpbmcgZXh0WzNdID0geyAiIiwgIkFSQiIsICJF
WFQiIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICB2b2lk
KiBhZGRyID0gY3R4LT5nZXRQcm9jQWRkcmVzcyhwcm9jICsgZXh0W2ldKTsKKyAgICAgICAgaWYg
KGFkZHIpIHsKKyAgICAgICAgICAgIHJldHVybiBhZGRyOworICAgICAgICB9CisgICAgfQorCisg
ICAgbV92YWxpZCA9IGZhbHNlOworICAgIHJldHVybiAwOworfQorCitQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzKQoreworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dChuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMpKTsKKyAgICByZXR1cm4gY29udGV4dC0+
bV9pbnRlcm5hbCA/IGNvbnRleHQucmVsZWFzZSgpIDogMDsKK30KKworR3JhcGhpY3NDb250ZXh0
M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJz
KQorICAgIDogbV9pbnRlcm5hbChuZXcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChhdHRycykp
Cit7CisgICAgaWYgKCFtX2ludGVybmFsLT5pc1ZhbGlkKCkpIAorICAgICAgICBtX2ludGVybmFs
ID0gMDsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCit7Cit9
CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
OworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1
cmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2ludGVybmFsLT5tX3RleHR1cmU7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEhUTUxDYW52YXNF
bGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKKyAgICBJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworCisgICAgbV9pbnRlcm5hbC0+YmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9pbnRlcm5hbC0+bV9tYWlu
RmJvKTsKKworICAgIGdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBtX2ludGVybmFsLT5tX3BpeGVscy5i
aXRzKCkpOworCisgICAgUVBhaW50ZXIqIHAgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICBwLT5kcmF3SW1hZ2UoMCwgMCwgbV9pbnRlcm5hbC0+bV9waXhl
bHMudHJhbnNmb3JtZWQoUU1hdHJpeCgpLnJvdGF0ZSgxODApKSk7CisKKyAgICBtX2ludGVybmFs
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ludGVy
bmFsLT5tX2N1cnJlbnRGYm8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWlu
dCgpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQoreworICAgIGlmICgoKHdpZHRoID09IG1fY3VycmVudFdpZHRoKSAmJiAoaGVp
Z2h0ID09IG1fY3VycmVudEhlaWdodCkpIHx8ICghbV9pbnRlcm5hbCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhlaWdo
dCA9IGhlaWdodDsKKworICAgIG1faW50ZXJuYWwtPm1fcGl4ZWxzID0gUUltYWdlKG1fY3VycmVu
dFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX2ludGVybmFsLT5tX3RleHR1cmUpOworICAgIGdsVGV4SW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDAp
OworICAgCisgICAgbV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgbV9pbnRlcm5hbC0+bV9tYWluRmJvKTsKKyAgICBtX2ludGVybmFsLT5i
aW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1faW50ZXJu
YWwtPm1fZGVwdGhCdWZmZXIpOworICAgIG1faW50ZXJuYWwtPnJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5ULCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICBtX2ludGVybmFsLT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworICAgIAorICAgIG1faW50ZXJuYWwtPmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2ludGVybmFsLT5tX3Rl
eHR1cmUsIDApOworICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFD
SE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1faW50ZXJuYWwtPm1fZGVw
dGhCdWZmZXIpOworCisgICAgR0xlbnVtIHN0YXR1cyA9IG1faW50ZXJuYWwtPmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKTsKKyAgICBpZiAoc3Rh
dHVzICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAg
ICBxV2FybmluZygpIDw8ICJHcmFwaGljc0NvbnRleHQzRDogSW52YWxpZCBGQk8iOworICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVS
X0JJVCk7CisgICAgZ2xGbHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3Rp
dmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAg
QVNTRVJUKHNoYWRlcik7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT5hdHRhY2hTaGFkZXIoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0
KCksIChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBs
b25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOwor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+YmluZEF0dHJpYkxvY2F0aW9uKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBpbmRleCwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1
ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJp
bmRCdWZmZXIodGFyZ2V0LCBidWZmZXIgPyAoR0x1aW50KSBidWZmZXItPm9iamVjdCgpIDogMCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+bV9jdXJyZW50RmJv
ID0gKGJ1ZmZlciAmJiBidWZmZXItPm9iamVjdCgpKSA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0
KCkgOiBtX2ludGVybmFsLT5tX21haW5GYm87CisgICAgbV9pbnRlcm5hbC0+YmluZEZyYW1lYnVm
ZmVyKHRhcmdldCwgbV9pbnRlcm5hbC0+bV9jdXJyZW50RmJvKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xS
ZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0
LCByZW5kZXJidWZmZXIgPyAoR0x1aW50KSByZW5kZXJidWZmZXItPm9iamVjdCgpIDogMCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSA/IChH
THVpbnQpIHRleHR1cmUtPm9iamVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJsZW5kQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91
YmxlIGFscGhhKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgZ2xCbGVuZENvbG9yKHN0YXRpY19jYXN0PGZsb2F0PihyZWQpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oZ3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0
PihhbHBoYSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKCB1
bnNpZ25lZCBsb25nIG1vZGUgKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgZ2xCbGVuZEVxdWF0aW9uKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1
bnNpZ25lZCBsb25nIG1vZGVBbHBoYSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2Rl
UkdCLCBtb2RlQWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMo
dW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEJsZW5kRnVuYyhzZmFj
dG9yLCBkZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5k
RnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwg
dW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJs
ZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGEodGFyZ2V0
LCBzaXplLCAwLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRh
dGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBsb25n
IHVzYWdlKQoreworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5sZW5ndGgoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+YnVmZmVyRGF0YSh0YXJnZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCks
IGFycmF5LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBXZWJH
TEFycmF5KiBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFy
cmF5LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpKTsKK30KKwordW5zaWduZWQg
bG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBs
b25nIHRhcmdldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIHJldHVybiBtX2ludGVybmFsLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJs
ZSBnLCBkb3VibGUgYiwgZG91YmxlIGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbENsZWFyQ29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KHIpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oZyksIHN0YXRpY19jYXN0PGZsb2F0PihiKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGEpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIodW5zaWduZWQg
bG9uZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgZ2xDbGVhcihtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJE
ZXB0aChkb3VibGUgZGVwdGgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIGdsQ2xlYXJEZXB0aGYo
ZGVwdGgpOworI2Vsc2UKKyAgICBnbENsZWFyRGVwdGgoZGVwdGgpOworI2VuZGlmCit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChsb25nIHMpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9F
U18yKQorICAgIGdsQ2xlYXJTdGVuY2lsZihzKTsKKyNlbHNlCisgICAgZ2xDbGVhclN0ZW5jaWwo
cyk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKGJvb2wg
cmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENvbG9yTWFzayhyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFk
ZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmNvbXBp
bGVTaGFkZXIoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVs
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDb3B5VGV4SW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQodW5z
aWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0
LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZSh1
bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBnbEN1bGxGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkZXB0aEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xEZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhib29sIGZsYWcpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERlcHRoTWFzayhmbGFnKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShkb3VibGUgek5lYXIsIGRv
dWJsZSB6RmFyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKKyAgICBnbERlcHRoUmFuZ2VmKHpOZWFyLCB6
RmFyKTsKKyNlbHNlCisgICAgZ2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKKyNlbmRpZgorfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBB
U1NFUlQoc2hhZGVyKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIG1faW50ZXJuYWwtPmRldGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3Qo
KSwgKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERpc2FibGUoY2FwKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5k
ZXgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X2ludGVybmFsLT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJz
dCwgbG9uZyBjb3VudCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIGdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25l
ZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xEcmF3RWxlbWVudHMo
bW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGlu
dHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZSh1
bnNpZ25lZCBsb25nIGNhcCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIGdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmZpbmlzaCgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBnbEZpbmlzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEZsdXNo
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVk
IGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZm
ZXJ0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJn
ZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgbG9uZyBsZXZlbCkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVy
VGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlID8gKEdMdWlu
dCkgdGV4dHVyZS0+b2JqZWN0KCkgOiAwLCBsZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmZyb250RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEZyb250RmFjZShtb2RlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJn
ZXQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X2ludGVybmFsLT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBs
b25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbS0+b2JqZWN0
KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworCisgICAgR0xpbnQgbWF4TGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFBy
b2dyYW1pdihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgR0xfQUNUSVZF
X0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4TGVuZ3RoKTsKKworICAgIEdMY2hhciBuYW1lW21h
eExlbmd0aF07IAorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aDsKKyAgICBHTGludCBzaXplOworICAg
IEdMZW51bSB0eXBlOworCisgICAgbV9pbnRlcm5hbC0+Z2V0QWN0aXZlQXR0cmliKHN0YXRpY19j
YXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0KCkpLCBpbmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxl
bmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5n
dGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKworICAg
IHJldHVybiB0cnVlOworfQorICAgIAorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZl
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2
ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtLT5vYmplY3QoKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAg
ICBHTGludCBtYXhMZW5ndGg7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KHN0YXRpY19j
YXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0KCkpLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVO
R1RILCAmbWF4TGVuZ3RoKTsKKworICAgIEdMY2hhciBuYW1lW21heExlbmd0aF07CisgICAgR0xz
aXplaSBuYW1lTGVuZ3RoOworICAgIEdMaW50IHNpemU7CisgICAgR0xlbnVtIHR5cGU7CisKKyAg
ICBtX2ludGVybmFsLT5nZXRBY3RpdmVVbmlmb3JtKHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3Jh
bS0+b2JqZWN0KCkpLCBpbmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBl
LCBuYW1lKTsKKworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlw
ZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKworICAgIHJldHVybiB0cnVlOworfQor
CitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAg
ICAgcmV0dXJuIC0xOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEF0dHJpYkxvY2F0aW9uKChHTHVpbnQp
IHByb2dyYW0tPm9iamVjdCgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0
ZXMoKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5tX2F0dHJzOworfQorCit1bnNpZ25lZCBs
b25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1faW50ZXJuYWwt
Pm1fc3ludGhldGljRXJyb3JzLnNpemUoKSA+IDApIHsKKyAgICAgICAgTGlzdEhhc2hTZXQ8dW5z
aWduZWQgbG9uZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9y
cy5iZWdpbigpOworICAgICAgICB1bnNpZ25lZCBsb25nIGVyciA9ICppdGVyOworICAgICAgICBt
X2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7CisgICAgICAgIHJldHVy
biBlcnI7CisgICAgfQorCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICByZXR1cm4gZ2xHZXRFcnJvcigpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gU3RyaW5nKChjb25zdCBjaGFyKikg
Z2xHZXRTdHJpbmcobmFtZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEhpbnQodGFyZ2V0LCBtb2RlKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZl
cikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50
ZXJuYWwtPmlzQnVmZmVyKChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIEdy
YXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xJc0VuYWJs
ZWQoY2FwKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihXZWJH
TEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNGcmFtZWJ1ZmZlcigoR0x1aW50
KSBmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpp
c1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzUHJvZ3JhbSgoR0x1aW50KSBw
cm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVy
YnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5k
ZXJidWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5pc1JlbmRl
cmJ1ZmZlcigoR0x1aW50KSByZW5kZXJidWZmZXItPm9iamVjdCgpKTsKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBpZiAo
IXNoYWRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzU2hhZGVy
KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojppc1RleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsSXNUZXh0dXJlKChHTHVpbnQpIHRleHR1cmUt
Pm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKGRvdWJs
ZSB3aWR0aCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIGdsTGluZVdpZHRoKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7Cisg
ICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgbV9pbnRlcm5hbC0+bGlua1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2Jq
ZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSh1bnNpZ25l
ZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgZ2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJs
ZSB1bml0cykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIGdsUG9seWdvbk9mZnNldChzdGF0aWNfY2FzdDxmbG9hdD4oZmFjdG9yKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHVuaXRzKSk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhpY3ND
b250ZXh0M0Q6OnJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9u
ZyB0eXBlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgCisgICAgaWYgKHR5cGUgIT0gR0xfVU5TSUdORURfQllURSB8fCBmb3JtYXQgIT0gR0xfUkdC
QSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5PiBhcnJheSA9IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh3aWR0aCAq
IGhlaWdodCAqIDQpOworICAgIGdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIChHTHZvaWQqKSBhcnJheS0+ZGF0YSgpKTsKKyAgICByZXR1cm4gYXJyYXk7ICAg
IAorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3Rv
cmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5yZW5kZXJi
dWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShkb3VibGUgdmFsdWUsIGJv
b2wgaW52ZXJ0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgZ2xTYW1wbGVDb3ZlcmFnZShzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpLCBpbnZlcnQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1
bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU2Npc3Nvcih4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIEFTU0VSVChz
aGFkZXIpOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgY29uc3QgQ1N0cmluZyYgY3MgPSBzdHJpbmcudXRmOCgpOworICAgIGNvbnN0IGNoYXIq
IHMgPSBjcy5kYXRhKCk7CisgICAgCisgICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsK
KyAgICBtX2ludGVybmFsLT5zaGFkZXJTb3VyY2UoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwg
MSwgJnMsICZsZW5ndGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVu
Yyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFN0ZW5jaWxG
dW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5j
aWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxv
bmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZh
Y2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5j
aWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIGdsU3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1
bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2sp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3AodW5zaWduZWQgbG9uZyBm
YWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xTdGVuY2lsT3AoZmFp
bCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9w
U2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVk
IGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5zdGVuY2lsT3BTZXBhcmF0
ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHZh
bHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgcG5hbWUsIGludCB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1l
LCBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFmKGxv
Y2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYobG9u
ZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xZnYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0yZihs
b2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJm
dihsb25nIGxvY2F0aW9uLCBmbG9hdCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJm
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtM2YobG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJu
YWwtPnVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9h
dCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYobG9u
ZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00ZnYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTFpKGxvbmcgbG9jYXRpb24sIGludCB2MCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xaShsb2NhdGlvbiwgdjAp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24s
IGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkobG9uZyBsb2Nh
dGlvbiwgaW50IHYwLCBpbnQgdjEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwg
aW50KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShsb25nIGxvY2F0
aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTNpKGxvY2F0aW9uLCB2
MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihsb25n
IGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zaXYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRp
KGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBpbnQgdjIsIGludCB2MykKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVu
aWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCogYXJyYXksIGludCBzaXplKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRl
cm5hbC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNw
b3NlLCBmbG9hdCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJpeDJmdihsb2Nh
dGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0
KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXpl
LCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIGFycmF5LCBp
bnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9z
ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgCisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51c2VQ
cm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBB
U1NFUlQocHJvZ3JhbSk7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52YWxpZGF0ZVByb2dyYW0oKEdMdWludCkgcHJvZ3Jh
bS0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIx
Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMWYoaW5k
eCwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYodW5z
aWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIxZnYoaW5k
eCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZih1
bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJp
YjJmKGluZHgsIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiBhcnJheSkKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0
dHJpYjJmdihpbmR4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2
MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnZlcnRleEF0dHJpYjNmKGluZHgsIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9h
dCogYXJyYXkpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIzZnYoaW5keCwgYXJyYXkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZHgsIGZs
b2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmli
NGYoaW5keCwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52
ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0
eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25n
IG9mZnNldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9y
bWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChs
b25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFZp
ZXdwb3J0KHN0YXRpY19jYXN0PEdMaW50Pih4KSwgc3RhdGljX2Nhc3Q8R0xpbnQ+KHkpLCBzdGF0
aWNfY2FzdDxHTHNpemVpPih3aWR0aCksIHN0YXRpY19jYXN0PEdMc2l6ZWk+KGhlaWdodCkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBu
YW1lLCB1bnNpZ25lZCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5nZXRCdWZm
ZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldEZs
b2F0dihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50
LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vy
dih1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJv
Z3JhbWl2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBwbmFtZSwgdmFsdWUpOworfQorCitT
dHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
CisgICAgR0xpbnQgbGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFByb2dyYW1pdigoR0x1aW50
KSBwcm9ncmFtLT5vYmplY3QoKSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAg
IEdMc2l6ZWkgc2l6ZTsKKworICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9j
KGxlbmd0aCk7CisgICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBtX2lu
dGVybmFsLT5nZXRQcm9ncmFtSW5mb0xvZygoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbGVu
Z3RoLCAmc2l6ZSwgaW5mbyk7CisKKyAgICBTdHJpbmcgcmVzdWx0KGluZm8pOworICAgIGZhc3RG
cmVlKGluZm8pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5nZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlcml2KFdlYkdMU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGludCogdmFsdWUpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5nZXRTaGFkZXJpdigoR0x1
aW50KSBzaGFkZXItPm9iamVjdCgpLCBwbmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbGVu
Z3RoOworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0
KCksIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisKKyAgICBHTHNpemVpIHNpemU7Cisg
ICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAo
IWluZm8pCisgICAgICAgIHJldHVybiAiIjsKKworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcklu
Zm9Mb2coKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisK
KyAgICBTdHJpbmcgcmVzdWx0KGluZm8pOworICAgIGZhc3RGcmVlKGluZm8pOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3Vy
Y2UoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFNo
YWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RI
LCAmbGVuZ3RoKTsKKworICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xj
aGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOworICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJu
ICIiOworCisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlci0+
b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOworCisgICAgU3RyaW5nIHJlc3VsdChpbmZv
KTsKKyAgICBmYXN0RnJlZShpbmZvKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFy
YW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCog
dmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9u
ZyBsb2NhdGlvbiwgZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VW5pZm9ybWZ2KChHTHVpbnQpIHBy
b2dyYW0tPm9iamVjdCgpLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRVbmlmb3JtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9u
LCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VW5pZm9ybWl2KChHTHVpbnQpIHByb2dyYW0tPm9iamVj
dCgpLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCitsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRV
bmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUp
Cit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldFVuaWZvcm1Mb2Nh
dGlvbigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9u
ZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VmVy
dGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxv
bmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5h
bWUsIHZhbHVlKTsKK30KKworbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmli
T2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICAKKyAgICB2b2lkKiBw
b2ludGVyOworICAgIG1faW50ZXJuYWwtPmdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBw
bmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGxvbmc+KHBvaW50
ZXIpOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1
bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0
ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEltYWdlKiBpbWFnZSwg
Ym9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQoreworICAgIEFTU0VSVChpbWFnZSk7
CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAg
IFFJbWFnZTo6Rm9ybWF0IGZvcm1hdCA9ICghcHJlbXVsdGlwbHlBbHBoYSkgPyBRSW1hZ2U6OkZv
cm1hdF9BUkdCMzIgOgorICAgICAgICBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGll
ZDsKKyAgICBRTWF0cml4IHRyID0gUU1hdHJpeCgpLnJvdGF0ZShmbGlwWSA/IDE4MCA6IDApOwor
ICAgIFFQaXhtYXAqIG5hdGl2ZVBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOyAKKyAgICBRSW1hZ2UgbmF0aXZlSW1hZ2UgPSBuYXRpdmVQaXhtYXAtPnRvSW1hZ2Uo
KS5jb252ZXJ0VG9Gb3JtYXQoZm9ybWF0KS50cmFuc2Zvcm1lZCh0cik7CisKKyAgICBnbFRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgR0xfUkdCQSwgbmF0aXZlSW1hZ2Uud2lkdGgoKSwgbmF0aXZl
SW1hZ2UuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsCisgICAgICAgICAg
ICBuYXRpdmVJbWFnZS5iaXRzKCkpOworCisgICAgcmV0dXJuIDA7Cit9CisgICAgCitpbnQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBs
ZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMp
Cit7CisgICAgZ2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIEltYWdlKiBpbWFnZSwgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQoreworICAgIEFTU0VSVChpbWFnZSk7Cisg
ICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIFFJ
bWFnZTo6Rm9ybWF0IGZvcm1hdCA9ICghcHJlbXVsdGlwbHlBbHBoYSkgPyBRSW1hZ2U6OkZvcm1h
dF9BUkdCMzIgOgorICAgICAgICBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZDsK
KyAgICBRTWF0cml4IHRyID0gUU1hdHJpeCgpLnJvdGF0ZShmbGlwWSA/IDE4MCA6IDApOworICAg
IFFQaXhtYXAqIG5hdGl2ZVBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOyAKKyAgICBRSW1hZ2UgbmF0aXZlSW1hZ2UgPSBuYXRpdmVQaXhtYXAtPnRvSW1hZ2UoKS5j
b252ZXJ0VG9Gb3JtYXQoZm9ybWF0KS50cmFuc2Zvcm1lZCh0cik7CisgICAgCisgICAgZ2xUZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIG5hdGl2ZUltYWdlLndpZHRoKCks
IG5hdGl2ZUltYWdlLmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBuYXRpdmVJ
bWFnZS5iaXRzKCkpOworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIEdMdWludCBvOworICAgIG1faW50ZXJuYWwtPmdlbkJ1ZmZlcnMoMSwg
Jm8pOworICAgIHJldHVybiBvOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlRnJhbWVidWZmZXIoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgR0x1aW50IG87CisgICAgbV9pbnRlcm5hbC0+Z2VuRnJhbWVidWZmZXJzKDEs
ICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVByb2dyYW0oKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZVByb2dyYW0oKTsKK30KKwordW5zaWdu
ZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbzsKKyAgICBtX2lu
dGVybmFsLT5nZW5SZW5kZXJidWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5z
aWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1
cm4gbV9pbnRlcm5hbC0+Y3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBH
TF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKK30KKwordW5zaWduZWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgR0x1aW50IG87CisgICAgZ2xHZW5UZXh0dXJlcygx
LCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVCdWZmZXJzKDEsICZidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25l
ZCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKHVuc2lnbmVkIHBy
b2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+ZGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKHVuc2lnbmVkIHNoYWRlcikKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0
ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0
dXJlKHVuc2lnbmVkIHRleHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKK30KKworaW50
IEdyYXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyhpbnQgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBHTF9CWVRFOgorICAgICAgICAgICAgcmV0dXJuIHNpemVv
ZihHTGJ5dGUpOworICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdMdWJ5dGUpOworICAgICAgICBjYXNlIEdMX1NIT1JUOgorICAgICAgICAg
ICAgcmV0dXJuIHNpemVvZihHTHNob3J0KTsKKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDoKKyAgICAgICAgICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQpOworICAgICAgICBjYXNlIEdM
X0lOVDoKKyAgICAgICAgICAgIHJldHVybiBzaXplb2YoR0xpbnQpOworICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgIHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICAg
ICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9hdCk7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3Ip
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9B
cGkvcXdlYnNldHRpbmdzLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAppbmRl
eCBkNjBmMDljLi5lNmZkZjYxIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5n
cy5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCkBAIC0xNTgsNiArMTU4
LDEzIEBAIHZvaWQgUVdlYlNldHRpbmdzUHJpdmF0ZTo6YXBwbHkoKQogCiAgICAgICAgIHNldHRp
bmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh2YWx1ZSk7CiAjZW5kaWYKKyNp
ZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUoUVdl
YlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbG9iYWwtPmF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQpKTsK
KworICAgICAgICBzZXR0aW5ncy0+c2V0V2ViR0xFbmFibGVkKHZhbHVlKTsKKyNlbmRpZgorIAog
ICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0
Q2FuT3BlbldpbmRvd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
b2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2lu
ZG93cykpOwogICAgICAgICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0
b21hdGljYWxseSh2YWx1ZSk7CkBAIC00MDEsNiArNDA4LDcgQEAgUVdlYlNldHRpbmdzOjpRV2Vi
U2V0dGluZ3MoKQogICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6TG9jYWxD
b250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscywgZmFsc2UpOwogICAgIGQtPmF0dHJpYnV0ZXMuaW5z
ZXJ0KFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzRmlsZVVybHMsIHRydWUpOwog
ICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQsIGZhbHNlKTsKKyAgICBkLT5hdHRyaWJ1dGVzLmluc2VydChRV2ViU2V0dGlu
Z3M6OldlYkdMRW5hYmxlZCwgZmFsc2UpOwogICAgIGQtPm9mZmxpbmVTdG9yYWdlRGVmYXVsdFF1
b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAgIGQtPmRlZmF1bHRUZXh0RW5jb2RpbmcgPSBRTGF0
aW4xU3RyaW5nKCJpc28tODg1OS0xIik7CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3
ZWJzZXR0aW5ncy5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaAppbmRleCBiMWY1Y2Yy
Li4yOWMwMWI2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5oCisrKyBi
L1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgKQEAgLTcwLDcgKzcwLDggQEAgcHVibGljOgog
ICAgICAgICBMb2NhbENvbnRlbnRDYW5BY2Nlc3NGaWxlVXJscywKICAgICAgICAgRG5zUHJlZmV0
Y2hFbmFibGVkLAogICAgICAgICBYU1NBdWRpdG9yRW5hYmxlZCwKLSAgICAgICAgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0VuYWJsZWQKKyAgICAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQsCisgICAgICAgIFdlYkdMRW5hYmxlZAogICAgIH07CiAgICAgZW51bSBXZWJHcmFwaGljIHsK
ICAgICAgICAgTWlzc2luZ0ltYWdlR3JhcGhpYywKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9RR1ZM
YXVuY2hlci9tYWluLmNwcCBiL1dlYktpdC9xdC9RR1ZMYXVuY2hlci9tYWluLmNwcAppbmRleCA0
NDhiNGIwLi4zMDdlMTE4IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvUUdWTGF1bmNoZXIvbWFpbi5j
cHAKKysrIGIvV2ViS2l0L3F0L1FHVkxhdW5jaGVyL21haW4uY3BwCkBAIC01MjEsNiArNTIxLDgg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICB1cmwgPSBhcmdzLmF0
KDEpOwogICAgIGlmIChhcmdzLmNvbnRhaW5zKCItLWNvbXBvc2l0aW5nIikpCiAgICAgICAgIFFX
ZWJTZXR0aW5nczo6Z2xvYmFsU2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIHRydWUpOworICAgIGlmIChhcmdzLmNvbnRh
aW5zKCItLXdlYmdsIikpCisgICAgICAgIFFXZWJTZXR0aW5nczo6Z2xvYmFsU2V0dGluZ3MoKS0+
c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkLCB0cnVlKTsKIAogICAgIE1h
aW5XaW5kb3cqIHdpbmRvdyA9IG5ldyBNYWluV2luZG93OwogICAgIHdpbmRvdy0+bG9hZCh1cmwp
OwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvUXRMYXVuY2hlci9tYWluLmNwcCBiL1dlYktpdFRv
b2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAKaW5kZXggYzcyNWMyZi4uYjg5YzAwMyAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvUXRMYXVuY2hlci9tYWluLmNwcAorKysgYi9XZWJLaXRUb29scy9RdExh
dW5jaGVyL21haW4uY3BwCkBAIC0xMTYsNiArMTE2LDcgQEAgcHJvdGVjdGVkIHNsb3RzOgogCiAg
ICAgdm9pZCBzZXRUb3VjaE1vY2tpbmcoYm9vbCBvbik7CiAgICAgdm9pZCB0b2dnbGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKGJvb2wgdG9nZ2xlKTsKKyAgICB2b2lkIHRvZ2dsZVdlYkdMKGJvb2wg
dG9nZ2xlKTsKICAgICB2b2lkIGluaXRpYWxpemVWaWV3KGJvb2wgdXNlR3JhcGhpY3NWaWV3ID0g
ZmFsc2UpOwogCiBwdWJsaWMgc2xvdHM6CkBAIC00NDMsNiArNDQ0LDExIEBAIHZvaWQgTGF1bmNo
ZXJXaW5kb3c6OnRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCB0b2dnbGUpCiAgICAg
cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRW5hYmxlZCwgdG9nZ2xlKTsKIH0KIAordm9pZCBMYXVuY2hlcldpbmRvdzo6
dG9nZ2xlV2ViR0woYm9vbCB0b2dnbGUpCit7CisgICAgcGFnZSgpLT5zZXR0aW5ncygpLT5zZXRB
dHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsIHRvZ2dsZSk7Cit9CisKIHZvaWQg
TGF1bmNoZXJXaW5kb3c6OmluaXRpYWxpemVWaWV3KGJvb2wgdXNlR3JhcGhpY3NWaWV3KQogewog
ICAgIGRlbGV0ZSBtX3ZpZXc7CkBAIC01NDQsNiArNTUwLDEwIEBAIHZvaWQgTGF1bmNoZXJXaW5k
b3c6OnNldHVwVUkoKQogICAgIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmctPnNldENoZWNr
YWJsZSh0cnVlKTsKICAgICB0b2dnbGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nLT5zZXRDaGVja2Vk
KGZhbHNlKTsKIAorICAgIFFBY3Rpb24qIHRvZ2dsZVdlYkdMID0gdG9vbHNNZW51LT5hZGRBY3Rp
b24oIlRvZ2dsZSBXZWJHTCIsIHRoaXMsIFNMT1QodG9nZ2xlV2ViR0woYm9vbCkpKTsKKyAgICB0
b2dnbGVXZWJHTC0+c2V0Q2hlY2thYmxlKHRydWUpOworICAgIHRvZ2dsZVdlYkdMLT5zZXRDaGVj
a2VkKGZhbHNlKTsKKwogICAgIFFBY3Rpb24qIHRvZ2dsZUdyYXBoaWNzVmlldyA9IHRvb2xzTWVu
dS0+YWRkQWN0aW9uKCJUb2dnbGUgdXNlIG9mIFFHcmFwaGljc1ZpZXciLCB0aGlzLCBTTE9UKGlu
aXRpYWxpemVWaWV3KGJvb2wpKSk7CiAgICAgdG9nZ2xlR3JhcGhpY3NWaWV3LT5zZXRDaGVja2Fi
bGUodHJ1ZSk7CiAgICAgdG9nZ2xlR3JhcGhpY3NWaWV3LT5zZXRDaGVja2VkKGZhbHNlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49080</attachid>
            <date>2010-02-19 08:00:25 -0800</date>
            <delta_ts>2010-02-23 05:13:53 -0800</delta_ts>
            <desc>Qt WebGL support</desc>
            <filename>qt-webgl-support-2.diff</filename>
            <type>text/plain</type>
            <size>72410</size>
            <attacher name="Jarkko Sakkinen">jarkko.sakkinen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9XZWJDb3JlL1dlYkNvcmUucHJpCmlu
ZGV4IGMxYjJlNWEuLjhiYzdkMTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMjgyLDggKzI4MiwxNyBAQCBJRExfQklORElOR1Mg
Kz0gXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaWRsIFwKICAgICBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlk
bCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9X
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5pZGwgXAorICAgIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRsIFwKICAg
ICBodG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJH
TFRleHR1cmUuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwg
XAogICAgIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRsIFwKICAgICBodG1s
L2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaWRsIFwKICAgICBodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkU2hvcnRBcnJheS5pZGwgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBy
byBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNGNiNDc5NC4uNDRjY2MxNyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yNjY2
LDYgKzI2NjYsODYgQEAgU09VUkNFUyArPSBcCiB9CiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVO
QUJMRV8zRF9DQU5WQVM9MSkgeworUVQgKz0gb3BlbmdsCitIRUFERVJTICs9IFwKKwliaW5kaW5n
cy9qcy9KU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dl
YkdMQXJyYXlIZWxwZXIuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVj
dG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IuaCBcCisJ
YmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMv
SlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWdu
ZWRJbnRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwlodG1sL2NhbnZhcy9DYW52YXNDb250ZXh0QXR0cmli
dXRlcy5oIFwKKwlodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xBY3RpdmVJbmZvLmggXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXlCdWZmZXIuaCBcCisJaHRt
bC9jYW52YXMvV2ViR0xBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oIFwKKwlo
dG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTENvbnRleHRB
dHRyaWJ1dGVzLmggXAorCWh0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5oIFwKKwlodG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdMR2V0SW5mby5oIFwK
KwlodG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oIFwKKwlodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCBcCisJ
aHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMVGV4dHVy
ZS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIFwKKwlodG1sL2NhbnZh
cy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJ
bnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oIFwKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIAorCitTT1VSQ0VTICs9IFwK
KwliaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRp
bmdzL2pzL0pTV2ViR0xBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRl
QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDdXN0
b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmNwcCBc
CisJYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9q
cy9KU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xJ
bnRBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5j
cHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGlu
Z3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5n
cy9qcy9KU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9K
U1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNX
ZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcCBcCisJaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0
dHJpYnV0ZXMuY3BwIFwKKyAgICBodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuY3BwIFwKKwlodG1s
L2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xBcnJheS5j
cHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xC
eXRlQXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCBc
CisJaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMR2V0SW5mby5jcHAgXAorCWh0bWwv
Y2FudmFzL1dlYkdMSW50QXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3Bw
IFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcCBc
CisJaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xU
ZXh0dXJlLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwIFwKKwlo
dG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xVbnNpZ25lZEludEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0
QXJyYXkuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcCBcCisKK30KKworCiBpbmNsdWRlKCQkUFdELy4uL1dlYktpdC9xdC9BcGkvaGVhZGVycy5w
cmkpCiBpbmNsdWRlKC4uL2luY2x1ZGUvUXRXZWJLaXQvY2xhc3NoZWFkZXJzLnByaSkKIEhFQURF
UlMgKz0gJCRXRUJLSVRfQVBJX0hFQURFUlMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAwYTQxZGM2Li5jZjFkZjcwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC00NCw2ICs0NCwxMyBA
QCB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7CiBjb25zdCAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBOdWxsUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCA9IDA7CiB0
eXBlZGVmIEdMdWludCBQbGF0Zm9ybTNET2JqZWN0OwogY29uc3QgUGxhdGZvcm0zRE9iamVjdCBO
dWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7CisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxR
dE9wZW5HTC9RdE9wZW5HTD4KKwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEOworY29uc3QgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgPSAwOwordHlwZWRlZiBpbnQgUGxhdGZvcm0zRE9iamVjdDsKK2NvbnN0IFBs
YXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3JtM0RPYmplY3QgPSAwOwogI2Vsc2UKIHR5cGVkZWYg
dm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsKIGNvbnN0ICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEID0gMDsKQEAgLTczLDcgKzgw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICAvLyBGSVhNRTogaWRlYWxs
eSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRmb3Jtcy4KLSNpZiBQTEFURk9STShDSFJP
TUlVTSkKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oUVQpCiAgICAgY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICNlbmRpZgogCkBAIC00MDksNiArNDE2LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0
OwogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OworI2Vs
aWYgUExBVEZPUk0oUVQpCisgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCgpOworICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3Jt
VGV4dHVyZSgpIGNvbnN0OwogI2Vsc2UKICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gTnVsbFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0Q7IH0KICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRl
eHR1cmUoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm0zRE9iamVjdDsgfQpAQCAtNzA0LDcg
KzcxNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZiAgICAgICAgCiAKICAgICAgICAg
Ly8gRklYTUU6IGlkZWFsbHkgdGhpcyB3b3VsZCBiZSB1c2VkIG9uIGFsbCBwbGF0Zm9ybXMuCi0j
aWYgUExBVEZPUk0oQ0hST01JVU0pCisjaWYgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JN
KFFUKQogICAgICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICAg
ICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+IG1faW50ZXJuYWw7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ODQyOTUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCkBAIC0wLDAgKzEsMTYxMSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTAgVGlldG8gQ29ycG9yYXRpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICAgICAKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ2FudmFzT2JqZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheS5oIgorI2lu
Y2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xGbG9hdEFycmF5LmgiCisjaW5j
bHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMSW50QXJyYXkuaCIKKyNp
bmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVy
LmgiCisjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEJ5
dGVBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCisjaWYgRU5BQkxFKDNE
X0NBTlZBUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZuZGVmIEdMX0FSQl92ZXJ0ZXhf
YnVmZmVyX29iamVjdAordHlwZWRlZiBwdHJkaWZmX3QgR0xpbnRwdHI7Cit0eXBlZGVmIHB0cmRp
ZmZfdCBHTHNpemVpcHRyOworI2VuZGlmCisKKyNpZm5kZWYgQVBJRU5UUlkKKyNkZWZpbmUgQVBJ
RU5UUlkKKyNlbmRpZgorCit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEFjdGl2ZVRleHR1cmVU
eXBlKSAoR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQXR0YWNoU2hhZGVyVHlw
ZSkgKEdMdWludCwgR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQmluZEF0dHJp
YkxvY2F0aW9uVHlwZSkgKEdMdWludCwgR0x1aW50LCBjb25zdCBjaGFyICopOwordHlwZWRlZiB2
b2lkIChBUElFTlRSWSAqZ2xCaW5kQnVmZmVyVHlwZSkgKEdMZW51bSwgR0x1aW50KTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkgKmdsQmluZEZyYW1lYnVmZmVyVHlwZSkgKEdMZW51bSB0YXJnZXQs
IEdMdWludCBmcmFtZWJ1ZmZlcik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEJpbmRQcm9n
cmFtVHlwZSkgKEdMZW51bSwgR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQmlu
ZFJlbmRlcmJ1ZmZlclR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsK
K3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQmxlbmRDb2xvclR5cGUpIChHTGNsYW1wZiwgR0xj
bGFtcGYsIEdMY2xhbXBmLCBHTGNsYW1wZik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEJs
ZW5kRXF1YXRpb25TZXBhcmF0ZVR5cGUpKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhh
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQmxlbmRGdW5jU2VwYXJhdGVUeXBlKShHTGVu
dW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBo
YSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEJ1ZmZlckRhdGFUeXBlKSAoR0xlbnVtLCBH
THNpemVpcHRyLCBjb25zdCBHTHZvaWQgKiwgR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsQnVmZmVyU3ViRGF0YVR5cGUpIChHTGVudW0sIEdMaW50cHRyLCBHTHNpemVpcHRyLCBj
b25zdCBHTHZvaWQgKik7Cit0eXBlZGVmIEdMZW51bSAoQVBJRU5UUlkgKmdsQ2hlY2tGcmFtZWJ1
ZmZlclN0YXR1c1R5cGUpIChHTGVudW0gdGFyZ2V0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkg
KmdsQ29tcGlsZVNoYWRlclR5cGUpIChHTHVpbnQpOwordHlwZWRlZiBHTHVpbnQgKEFQSUVOVFJZ
ICpnbENyZWF0ZVByb2dyYW1UeXBlKSAoKTsKK3R5cGVkZWYgR0x1aW50IChBUElFTlRSWSAqZ2xD
cmVhdGVTaGFkZXJUeXBlKSAoR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGVs
ZXRlQnVmZmVyc1R5cGUpIChHTHNpemVpLCBjb25zdCBHTHVpbnQgKik7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZICpnbERlbGV0ZUZyYW1lYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIGNvbnN0IEdM
dWludCAqZnJhbWVidWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGVsZXRlUHJv
Z3JhbXNUeXBlKSAoR0xzaXplaSwgY29uc3QgR0x1aW50ICopOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xEZWxldGVQcm9ncmFtVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlKSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQg
KnJlbmRlcmJ1ZmZlcnMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xEZWxldGVTaGFkZXJU
eXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGV0YWNoU2hhZGVyVHlw
ZSkgKEdMdWludCwgR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZICpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlwZSkgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBHTHVpbnQgcmVuZGVy
YnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRnJhbWVidWZmZXJUZXh0dXJlMkRU
eXBlKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQs
IEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpn
bEdlbkJ1ZmZlcnNUeXBlKSAoR0xzaXplaSwgR0x1aW50ICopOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xHZW5lcmF0ZU1pcG1hcFR5cGUpIChHTGVudW0gdGFyZ2V0KTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsR2VuRnJhbWVidWZmZXJzVHlwZSkgKEdMc2l6ZWkgbiwgR0x1aW50ICpm
cmFtZWJ1ZmZlcnMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZW5Qcm9ncmFtc1R5cGUp
IChHTHNpemVpLCBHTHVpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdlblJlbmRl
cmJ1ZmZlcnNUeXBlKSAoR0xzaXplaSBuLCBHTHVpbnQgKnJlbmRlcmJ1ZmZlcnMpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRBY3RpdmVBdHRyaWJUeXBlKSAoR0x1aW50IHByb2dyYW0s
IEdMdWludCBpbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICogbGVuZ3RoLCBHTGludCAq
IHNpemUsIEdMZW51bSAqIHR5cGUsIEdMY2hhciAqIG5hbWUpOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xHZXRBY3RpdmVVbmlmb3JtVHlwZSkgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5k
ZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqIGxlbmd0aCwgR0xpbnQgKiBzaXplLCBHTGVu
dW0gKiB0eXBlLCBHTGNoYXIgKiBuYW1lKTsKK3R5cGVkZWYgR0xpbnQgKEFQSUVOVFJZICpnbEdl
dEF0dHJpYkxvY2F0aW9uVHlwZSkgKEdMdWludCwgY29uc3QgY2hhciAqKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsR2V0QnVmZmVyUGFyYW1ldGVyaXZUeXBlKSAoR0xlbnVtLCBHTGVudW0s
IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRCdWZmZXJTdWJEYXRhVHlw
ZSkgKEdMZW51bSwgR0xpbnRwdHIsIEdMc2l6ZWlwdHIsIEdMdm9pZCAqKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZUeXBlKSAo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBh
cmFtcyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdldFByb2dyYW1JbmZvTG9nVHlwZSkg
KEdMdWludCwgR0xzaXplaSwgR0xzaXplaSAqLCBjaGFyICopOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xHZXRQcm9ncmFtaXZUeXBlKSAoR0x1aW50LCBHTGVudW0sIEdMaW50ICopOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlR5cGUpIChH
TGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSAqZ2xHZXRTaGFkZXJJbmZvTG9nVHlwZSkgKEdMdWludCwgR0xzaXplaSwgR0xz
aXplaSAqLCBjaGFyICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRTaGFkZXJpdlR5
cGUpIChHTHVpbnQsIEdMZW51bSwgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpn
bEdldFNoYWRlclNvdXJjZVR5cGUpIChHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkgKiwgY2hhciAq
KTsKK3R5cGVkZWYgR0x1aW50IChBUElFTlRSWSAqZ2xHZXRVbmlmb3JtTG9jYXRpb25UeXBlKSAo
R0x1aW50LCBjb25zdCBjaGFyKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdldFVuaWZv
cm1mdlR5cGUpIChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgKiBwYXJh
bXMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRVbmlmb3JtaXZUeXBlKSAoR0x1aW50
IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCAqIHBhcmFtcyk7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZICpnbEdldFZlcnRleEF0dHJpYmZ2VHlwZSkgKEdMdWludCBpbmRleCwgR0xlbnVt
IHBuYW1lLCBHTGZsb2F0ICogcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0
VmVydGV4QXR0cmliaXZUeXBlKSAoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50ICog
cGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0VmVydGV4QXR0cmliUG9pbnRl
cnZUeXBlKSAoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMdm9pZCAqKiBwb2ludGVyKTsK
K3R5cGVkZWYgR0xib29sZWFuIChBUElFTlRSWSAqZ2xJc0J1ZmZlclR5cGUpIChHTHVpbnQgYnVm
ZmVyKTsKK3R5cGVkZWYgR0xib29sZWFuIChBUElFTlRSWSAqZ2xJc0ZyYW1lYnVmZmVyVHlwZSkg
KEdMdWludCBmcmFtZWJ1ZmZlcik7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkgKmdsSXNQ
cm9ncmFtVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkgKmdsSXNS
ZW5kZXJidWZmZXJUeXBlKSAoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Cit0eXBlZGVmIEdMYm9vbGVh
biAoQVBJRU5UUlkgKmdsSXNTaGFkZXJUeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkgKmdsTGlua1Byb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsUmVuZGVyYnVmZmVyU3RvcmFnZVR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsU2hhZGVyU291cmNlVHlwZSkgKEdMdWludCwgR0xzaXplaSwgY29uc3Qg
Y2hhciAqKiwgY29uc3QgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFN0ZW5j
aWxGdW5jU2VwYXJhdGVUeXBlKSAoR0xlbnVtIGZhY2UsIEdMZW51bSBmdW5jLCBHTGludCByZWYs
IEdMdWludCBtYXNrKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsU3RlbmNpbE1hc2tTZXBh
cmF0ZVR5cGUpIChHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xTdGVuY2lsT3BTZXBhcmF0ZVR5cGUpIChHTGVudW0gZmFjZSwgR0xlbnVtIHNmYWls
LCBHTGVudW0gZHBmYWlsLCBHTGVudW0gZHBwYXNzKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkg
KmdsVW5pZm9ybTFmVHlwZSkgKEdMaW50LCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsVW5pZm9ybTFmdlR5cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xmbG9hdCAqKTsK
K3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTFpVHlwZSkgKEdMaW50LCBHTGludCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm0xaXZUeXBlKSAoR0xpbnQsIEdMc2l6
ZWksIGNvbnN0IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtMmZU
eXBlKSAoR0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAq
Z2xVbmlmb3JtMmZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0ICopOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtMmlUeXBlKSAoR0xpbnQsIEdMaW50LCBHTGlu
dCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm0yaXZUeXBlKSAoR0xpbnQsIEdM
c2l6ZWksIGNvbnN0IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3Jt
M2ZUeXBlKSAoR0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSAqZ2xVbmlmb3JtM2Z2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZs
b2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtM2lUeXBlKSAoR0xpbnQs
IEdMaW50LCBHTGludCwgR0xpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3Jt
M2l2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGludCAqKTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkgKmdsVW5pZm9ybTRmVHlwZSkgKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZs
b2F0LCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTRmdlR5cGUp
IChHTGludCwgR0xzaXplaSwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsVW5pZm9ybTRpVHlwZSkgKEdMaW50LCBHTGludCwgR0xpbnQsIEdMaW50LCBHTGludCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm00aXZUeXBlKSAoR0xpbnQsIEdMc2l6
ZWksIGNvbnN0IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtTWF0
cml4MmZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQgKik7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm1NYXRyaXgyeDNmdlR5cGUpIChHTGlu
dCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0ICopOwordHlwZWRlZiB2b2lkIChB
UElFTlRSWSAqZ2xVbmlmb3JtTWF0cml4Mng0ZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIEdMYm9v
bGVhbiwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9y
bU1hdHJpeDNmdlR5cGUpIChHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0
ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtTWF0cml4M3gyZnZUeXBlKSAo
R0xpbnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsVW5pZm9ybU1hdHJpeDN4NGZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBH
TGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVu
aWZvcm1NYXRyaXg0ZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xm
bG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybU1hdHJpeDR4MmZ2VHlw
ZSkgKEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm1NYXRyaXg0eDNmdlR5cGUpIChHTGludCwgR0xzaXpl
aSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAq
Z2xVc2VQcm9ncmFtVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFZh
bGlkYXRlUHJvZ3JhbVR5cGUpIChHTHVpbnQgcHJvZ3JhbSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbFZlcnRleEF0dHJpYjFmVHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCk7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYjFmdlR5cGUpIChHTHVpbnQsIGNvbnN0
IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYjJmVHlw
ZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYjJmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQg
Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYjNmVHlwZSkgKEdMdWlu
dCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYjNmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdM
ZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYjRmVHlwZSkg
KEdMdWludCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCwgY29u
c3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYjRmdlR5
cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpn
bFZlcnRleEF0dHJpYlBvaW50ZXJUeXBlKSAoR0x1aW50LCBHTGludCwgR0xlbnVtLCBHTGJvb2xl
YW4sIEdMc2l6ZWksIGNvbnN0IEdMdm9pZCAqKTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbCB7CitwdWJsaWM6CisKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbCgpOworCisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gbV92YWxpZDsgfQorCitw
dWJsaWM6CisKKyAgICBnbEFjdGl2ZVRleHR1cmVUeXBlIGFjdGl2ZVRleHR1cmU7CisgICAgZ2xB
dHRhY2hTaGFkZXJUeXBlIGF0dGFjaFNoYWRlcjsKKyAgICBnbEJpbmRBdHRyaWJMb2NhdGlvblR5
cGUgYmluZEF0dHJpYkxvY2F0aW9uOworICAgIGdsQmluZEJ1ZmZlclR5cGUgYmluZEJ1ZmZlcjsK
KyAgICBnbEJpbmRGcmFtZWJ1ZmZlclR5cGUgYmluZEZyYW1lYnVmZmVyOworICAgIGdsQmluZFBy
b2dyYW1UeXBlIGJpbmRQcm9ncmFtOworICAgIGdsQmluZFJlbmRlcmJ1ZmZlclR5cGUgYmluZFJl
bmRlcmJ1ZmZlcjsKKyAgICBnbEJsZW5kQ29sb3JUeXBlIGJsZW5kQ29sb3I7CisgICAgZ2xCbGVu
ZEVxdWF0aW9uU2VwYXJhdGVUeXBlIGJsZW5kRXF1YXRpb25TZXBhcmF0ZTsKKyAgICBnbEJsZW5k
RnVuY1NlcGFyYXRlVHlwZSBibGVuZEZ1bmNTZXBhcmF0ZTsKKyAgICBnbEJ1ZmZlckRhdGFUeXBl
IGJ1ZmZlckRhdGE7CisgICAgZ2xCdWZmZXJTdWJEYXRhVHlwZSBidWZmZXJTdWJEYXRhOworICAg
IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c1R5cGUgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1czsKKyAg
ICBnbENvbXBpbGVTaGFkZXJUeXBlIGNvbXBpbGVTaGFkZXI7CisgICAgZ2xDcmVhdGVQcm9ncmFt
VHlwZSBjcmVhdGVQcm9ncmFtOworICAgIGdsQ3JlYXRlU2hhZGVyVHlwZSBjcmVhdGVTaGFkZXI7
CisgICAgZ2xEZWxldGVCdWZmZXJzVHlwZSBkZWxldGVCdWZmZXJzOworICAgIGdsRGVsZXRlRnJh
bWVidWZmZXJzVHlwZSBkZWxldGVGcmFtZWJ1ZmZlcnM7CisgICAgZ2xEZWxldGVQcm9ncmFtc1R5
cGUgZGVsZXRlUHJvZ3JhbXM7CisgICAgZ2xEZWxldGVQcm9ncmFtVHlwZSBkZWxldGVQcm9ncmFt
OworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc1R5cGUgZGVsZXRlUmVuZGVyYnVmZmVyczsKKyAg
ICBnbERlbGV0ZVNoYWRlclR5cGUgZGVsZXRlU2hhZGVyOworICAgIGdsRGV0YWNoU2hhZGVyVHlw
ZSBkZXRhY2hTaGFkZXI7CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXlUeXBlIGRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSBl
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlw
ZSBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcjsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEVHlw
ZSBmcmFtZWJ1ZmZlclRleHR1cmUyRDsKKyAgICBnbEdlbkJ1ZmZlcnNUeXBlIGdlbkJ1ZmZlcnM7
CisgICAgZ2xHZW5lcmF0ZU1pcG1hcFR5cGUgZ2VuZXJhdGVNaXBtYXA7CisgICAgZ2xHZW5GcmFt
ZWJ1ZmZlcnNUeXBlIGdlbkZyYW1lYnVmZmVyczsKKyAgICBnbEdlblByb2dyYW1zVHlwZSBnZW5Q
cm9ncmFtczsKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNUeXBlIGdlblJlbmRlcmJ1ZmZlcnM7Cisg
ICAgZ2xHZXRBY3RpdmVBdHRyaWJUeXBlIGdldEFjdGl2ZUF0dHJpYjsKKyAgICBnbEdldEFjdGl2
ZVVuaWZvcm1UeXBlIGdldEFjdGl2ZVVuaWZvcm07CisgICAgZ2xHZXRBdHRyaWJMb2NhdGlvblR5
cGUgZ2V0QXR0cmliTG9jYXRpb247CisgICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdlR5cGUgZ2V0
QnVmZmVyUGFyYW1ldGVyaXY7CisgICAgZ2xHZXRCdWZmZXJTdWJEYXRhVHlwZSBnZXRCdWZmZXJT
dWJEYXRhOworICAgIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZUeXBlIGdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2OworICAgIGdsR2V0UHJvZ3JhbUluZm9M
b2dUeXBlIGdldFByb2dyYW1JbmZvTG9nOworICAgIGdsR2V0UHJvZ3JhbWl2VHlwZSBnZXRQcm9n
cmFtaXY7CisgICAgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlR5cGUgZ2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaXY7CisgICAgZ2xHZXRTaGFkZXJJbmZvTG9nVHlwZSBnZXRTaGFkZXJJbmZv
TG9nOworICAgIGdsR2V0U2hhZGVyaXZUeXBlIGdldFNoYWRlcml2OworICAgIGdsR2V0U2hhZGVy
U291cmNlVHlwZSBnZXRTaGFkZXJTb3VyY2U7CisgICAgZ2xHZXRVbmlmb3JtZnZUeXBlIGdldFVu
aWZvcm1mdjsKKyAgICBnbEdldFVuaWZvcm1pdlR5cGUgZ2V0VW5pZm9ybWl2OworICAgIGdsR2V0
VW5pZm9ybUxvY2F0aW9uVHlwZSBnZXRVbmlmb3JtTG9jYXRpb247CisgICAgZ2xHZXRWZXJ0ZXhB
dHRyaWJmdlR5cGUgZ2V0VmVydGV4QXR0cmliZnY7CisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdlR5
cGUgZ2V0VmVydGV4QXR0cmliaXY7CisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydlR5cGUg
Z2V0VmVydGV4QXR0cmliUG9pbnRlcnY7CisgICAgZ2xJc0J1ZmZlclR5cGUgaXNCdWZmZXI7Cisg
ICAgZ2xJc0ZyYW1lYnVmZmVyVHlwZSBpc0ZyYW1lYnVmZmVyOworICAgIGdsSXNQcm9ncmFtVHlw
ZSBpc1Byb2dyYW07CisgICAgZ2xJc1JlbmRlcmJ1ZmZlclR5cGUgaXNSZW5kZXJidWZmZXI7Cisg
ICAgZ2xJc1NoYWRlclR5cGUgaXNTaGFkZXI7CisgICAgZ2xMaW5rUHJvZ3JhbVR5cGUgbGlua1By
b2dyYW07CisgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlVHlwZSByZW5kZXJidWZmZXJTdG9yYWdl
OworICAgIGdsU2hhZGVyU291cmNlVHlwZSBzaGFkZXJTb3VyY2U7CisgICAgZ2xTdGVuY2lsRnVu
Y1NlcGFyYXRlVHlwZSBzdGVuY2lsRnVuY1NlcGFyYXRlOworICAgIGdsU3RlbmNpbE1hc2tTZXBh
cmF0ZVR5cGUgc3RlbmNpbE1hc2tTZXBhcmF0ZTsKKyAgICBnbFN0ZW5jaWxPcFNlcGFyYXRlVHlw
ZSBzdGVuY2lsT3BTZXBhcmF0ZTsKKyAgICBnbFVuaWZvcm0xZlR5cGUgdW5pZm9ybTFmOworICAg
IGdsVW5pZm9ybTFmdlR5cGUgdW5pZm9ybTFmdjsKKyAgICBnbFVuaWZvcm0xaVR5cGUgdW5pZm9y
bTFpOworICAgIGdsVW5pZm9ybTFpdlR5cGUgdW5pZm9ybTFpdjsKKyAgICBnbFVuaWZvcm0yZlR5
cGUgdW5pZm9ybTJmOworICAgIGdsVW5pZm9ybTJmdlR5cGUgdW5pZm9ybTJmdjsKKyAgICBnbFVu
aWZvcm0yaVR5cGUgdW5pZm9ybTJpOworICAgIGdsVW5pZm9ybTJpdlR5cGUgdW5pZm9ybTJpdjsK
KyAgICBnbFVuaWZvcm0zZlR5cGUgdW5pZm9ybTNmOworICAgIGdsVW5pZm9ybTNmdlR5cGUgdW5p
Zm9ybTNmdjsKKyAgICBnbFVuaWZvcm0zaVR5cGUgdW5pZm9ybTNpOworICAgIGdsVW5pZm9ybTNp
dlR5cGUgdW5pZm9ybTNpdjsKKyAgICBnbFVuaWZvcm00ZlR5cGUgdW5pZm9ybTRmOworICAgIGds
VW5pZm9ybTRmdlR5cGUgdW5pZm9ybTRmdjsKKyAgICBnbFVuaWZvcm00aVR5cGUgdW5pZm9ybTRp
OworICAgIGdsVW5pZm9ybTRpdlR5cGUgdW5pZm9ybTRpdjsKKyAgICBnbFVuaWZvcm1NYXRyaXgy
ZnZUeXBlIHVuaWZvcm1NYXRyaXgyZnY7CisgICAgZ2xVbmlmb3JtTWF0cml4MngzZnZUeXBlIHVu
aWZvcm1NYXRyaXgyeDNmdjsKKyAgICBnbFVuaWZvcm1NYXRyaXgyeDRmdlR5cGUgdW5pZm9ybU1h
dHJpeDJ4NGZ2OworICAgIGdsVW5pZm9ybU1hdHJpeDNmdlR5cGUgdW5pZm9ybU1hdHJpeDNmdjsK
KyAgICBnbFVuaWZvcm1NYXRyaXgzeDJmdlR5cGUgdW5pZm9ybU1hdHJpeDN4MmZ2OworICAgIGds
VW5pZm9ybU1hdHJpeDN4NGZ2VHlwZSB1bmlmb3JtTWF0cml4M3g0ZnY7CisgICAgZ2xVbmlmb3Jt
TWF0cml4NGZ2VHlwZSB1bmlmb3JtTWF0cml4NGZ2OworICAgIGdsVW5pZm9ybU1hdHJpeDR4MmZ2
VHlwZSB1bmlmb3JtTWF0cml4NHgyZnY7CisgICAgZ2xVbmlmb3JtTWF0cml4NHgzZnZUeXBlIHVu
aWZvcm1NYXRyaXg0eDNmdjsKKyAgICBnbFVzZVByb2dyYW1UeXBlIHVzZVByb2dyYW07CisgICAg
Z2xWYWxpZGF0ZVByb2dyYW1UeXBlIHZhbGlkYXRlUHJvZ3JhbTsKKyAgICBnbFZlcnRleEF0dHJp
YjFmVHlwZSB2ZXJ0ZXhBdHRyaWIxZjsKKyAgICBnbFZlcnRleEF0dHJpYjFmdlR5cGUgdmVydGV4
QXR0cmliMWZ2OworICAgIGdsVmVydGV4QXR0cmliMmZUeXBlIHZlcnRleEF0dHJpYjJmOworICAg
IGdsVmVydGV4QXR0cmliMmZ2VHlwZSB2ZXJ0ZXhBdHRyaWIyZnY7CisgICAgZ2xWZXJ0ZXhBdHRy
aWIzZlR5cGUgdmVydGV4QXR0cmliM2Y7CisgICAgZ2xWZXJ0ZXhBdHRyaWIzZnZUeXBlIHZlcnRl
eEF0dHJpYjNmdjsKKyAgICBnbFZlcnRleEF0dHJpYjRmVHlwZSB2ZXJ0ZXhBdHRyaWI0ZjsKKyAg
ICBnbFZlcnRleEF0dHJpYjRmdlR5cGUgdmVydGV4QXR0cmliNGZ2OworICAgIGdsVmVydGV4QXR0
cmliUG9pbnRlclR5cGUgdmVydGV4QXR0cmliUG9pbnRlcjsKKworcHVibGljOgorCisgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyczsKKyAgICBRR0xXaWRnZXQqIG1fZ2xX
aWRnZXQ7CisgICAgR0x1aW50IG1fdGV4dHVyZTsKKyAgICBHTHVpbnQgbV9tYWluRmJvOworICAg
IEdMdWludCBtX2N1cnJlbnRGYm87CisgICAgR0x1aW50IG1fZGVwdGhCdWZmZXI7CisgICAgUUlt
YWdlIG1fcGl4ZWxzOworICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGlj
RXJyb3JzOworCitwcml2YXRlOgorCisgICAgdm9pZCogZ2V0UHJvY0FkZHJlc3MoY29uc3QgUUdM
Q29udGV4dCogY3R4LCBjb25zdCBRU3RyaW5nJiBwcm9jKTsKKworcHJpdmF0ZToKKworICAgIGJv
b2wgbV92YWxpZDsKK307CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCisgICAg
OiBtX2F0dHJzKGF0dHJzKQorICAgICwgbV9nbFdpZGdldCgwKQorICAgICwgbV90ZXh0dXJlKDAp
CisgICAgLCBtX21haW5GYm8oMCkKKyAgICAsIG1fY3VycmVudEZibygwKQorICAgICwgbV9kZXB0
aEJ1ZmZlcigwKQorICAgICwgbV92YWxpZCh0cnVlKQoreworICAgIG1fYXR0cnMuYWxwaGEgPSB0
cnVlOworICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOworICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZh
bHNlOworICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgbV9hdHRycy5wcmVtdWx0
aXBsaWVkQWxwaGEgPSB0cnVlOworCisgICAgUUdMRm9ybWF0IGZvcm1hdDsKKworICAgIGZvcm1h
dC5zZXREZXB0aCh0cnVlKTsKKyAgICBmb3JtYXQuc2V0U2FtcGxlQnVmZmVycyh0cnVlKTsKKyAg
ICBmb3JtYXQuc2V0U3RlbmNpbChmYWxzZSk7CisKKyAgICBtX2dsV2lkZ2V0ID0gbmV3IFFHTFdp
ZGdldChmb3JtYXQpOworICAgIGlmICghbV9nbFdpZGdldC0+aXNWYWxpZCgpKSB7CisgICAgICAg
IHFXYXJuaW5nKCJHcmFwaGljc0NvbnRleHQzRDogUUdMV2lkZ2V0IGRvZXMgbm90IGhhdmUgYSB2
YWxpZCBjb250ZXh0Iik7CisgICAgICAgIG1fdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBjb25zdCBR
R0xDb250ZXh0KiBjdHggPSBtX2dsV2lkZ2V0LT5jb250ZXh0KCk7CisKKyAgICBhY3RpdmVUZXh0
dXJlID0gcmVpbnRlcnByZXRfY2FzdDxnbEFjdGl2ZVRleHR1cmVUeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbEFjdGl2ZVRleHR1cmUiKSk7CisgICAgYXR0YWNoU2hhZGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxnbEF0dGFjaFNoYWRlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQXR0YWNo
U2hhZGVyIikpOworICAgIGJpbmRBdHRyaWJMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xC
aW5kQXR0cmliTG9jYXRpb25UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJpbmRBdHRyaWJM
b2NhdGlvbiIpKTsKKyAgICBiaW5kQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbEJpbmRCdWZm
ZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJpbmRCdWZmZXIiKSk7CisgICAgYmluZEZy
YW1lYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbEJpbmRGcmFtZWJ1ZmZlclR5cGU+KGdldFBy
b2NBZGRyZXNzKGN0eCwgImdsQmluZEZyYW1lYnVmZmVyIikpOworICAgIGJpbmRQcm9ncmFtID0g
cmVpbnRlcnByZXRfY2FzdDxnbEJpbmRQcm9ncmFtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAi
Z2xCaW5kUHJvZ3JhbSIpKTsKKyAgICBiaW5kUmVuZGVyYnVmZmVyID0gcmVpbnRlcnByZXRfY2Fz
dDxnbEJpbmRSZW5kZXJidWZmZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJpbmRSZW5k
ZXJidWZmZXIiKSk7CisgICAgYmxlbmRDb2xvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCbGVuZENv
bG9yVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCbGVuZENvbG9yIikpOworICAgIGJsZW5k
RXF1YXRpb25TZXBhcmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCbGVuZEVxdWF0aW9uU2VwYXJh
dGVUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZSIpKTsK
KyAgICBibGVuZEZ1bmNTZXBhcmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCbGVuZEZ1bmNTZXBh
cmF0ZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQmxlbmRGdW5jU2VwYXJhdGUiKSk7Cisg
ICAgYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCdWZmZXJEYXRhVHlwZT4oZ2V0UHJv
Y0FkZHJlc3MoY3R4LCAiZ2xCdWZmZXJEYXRhIikpOworICAgIGJ1ZmZlclN1YkRhdGEgPSByZWlu
dGVycHJldF9jYXN0PGdsQnVmZmVyU3ViRGF0YVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
QnVmZmVyU3ViRGF0YSIpKTsKKyAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzID0gcmVpbnRlcnBy
ZXRfY2FzdDxnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgs
ICJnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMiKSk7CisgICAgY29tcGlsZVNoYWRlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xDb21waWxlU2hhZGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xD
b21waWxlU2hhZGVyIikpOworICAgIGNyZWF0ZVByb2dyYW0gPSByZWludGVycHJldF9jYXN0PGds
Q3JlYXRlUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQ3JlYXRlUHJvZ3JhbSIp
KTsKKyAgICBjcmVhdGVTaGFkZXIgPSByZWludGVycHJldF9jYXN0PGdsQ3JlYXRlU2hhZGVyVHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xDcmVhdGVTaGFkZXIiKSk7CisgICAgZGVsZXRlQnVm
ZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxldGVCdWZmZXJzVHlwZT4oZ2V0UHJvY0FkZHJl
c3MoY3R4LCAiZ2xEZWxldGVCdWZmZXJzIikpOworICAgIGRlbGV0ZUZyYW1lYnVmZmVycyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xEZWxldGVGcmFtZWJ1ZmZlcnNUeXBlPihnZXRQcm9jQWRkcmVzcyhj
dHgsICJnbERlbGV0ZUZyYW1lYnVmZmVycyIpKTsKKyAgICBkZWxldGVQcm9ncmFtID0gcmVpbnRl
cnByZXRfY2FzdDxnbERlbGV0ZVByb2dyYW1UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERl
bGV0ZVByb2dyYW0iKSk7CisgICAgZGVsZXRlUHJvZ3JhbXMgPSByZWludGVycHJldF9jYXN0PGds
RGVsZXRlUHJvZ3JhbXNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERlbGV0ZVByb2dyYW1z
IikpOworICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcnMgPSByZWludGVycHJldF9jYXN0PGdsRGVsZXRl
UmVuZGVyYnVmZmVyc1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsRGVsZXRlUmVuZGVyYnVm
ZmVycyIpKTsKKyAgICBkZWxldGVTaGFkZXIgPSByZWludGVycHJldF9jYXN0PGdsRGVsZXRlU2hh
ZGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xEZWxldGVTaGFkZXIiKSk7CisgICAgZGV0
YWNoU2hhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbERldGFjaFNoYWRlclR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsRGV0YWNoU2hhZGVyIikpOworICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXlUeXBlPihn
ZXRQcm9jQWRkcmVzcyhjdHgsICJnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIpKTsKKyAgICBl
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsRW5hYmxlVmVydGV4QXR0cmli
QXJyYXkiKSk7CisgICAgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIgPSByZWludGVycHJldF9jYXN0
PGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyIikpOworICAgIGZyYW1lYnVmZmVyVGV4dHVyZTJEID0gcmVp
bnRlcnByZXRfY2FzdDxnbEZyYW1lYnVmZmVyVGV4dHVyZTJEVHlwZT4oZ2V0UHJvY0FkZHJlc3Mo
Y3R4LCAiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCIpKTsKKyAgICBnZW5CdWZmZXJzID0gcmVpbnRl
cnByZXRfY2FzdDxnbEdlbkJ1ZmZlcnNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdlbkJ1
ZmZlcnMiKSk7CisgICAgZ2VuZXJhdGVNaXBtYXAgPSByZWludGVycHJldF9jYXN0PGdsR2VuZXJh
dGVNaXBtYXBUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdlbmVyYXRlTWlwbWFwIikpOwor
ICAgIGdlbkZyYW1lYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZW5GcmFtZWJ1ZmZlcnNU
eXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdlbkZyYW1lYnVmZmVycyIpKTsKKyAgICBnZW5Q
cm9ncmFtcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZW5Qcm9ncmFtc1R5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsR2VuUHJvZ3JhbXMiKSk7CisgICAgZ2VuUmVuZGVyYnVmZmVycyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xHZW5SZW5kZXJidWZmZXJzVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAi
Z2xHZW5SZW5kZXJidWZmZXJzIikpOworICAgIGdldEFjdGl2ZUF0dHJpYiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xHZXRBY3RpdmVBdHRyaWJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldEFj
dGl2ZUF0dHJpYiIpKTsKKyAgICBnZXRBY3RpdmVVbmlmb3JtID0gcmVpbnRlcnByZXRfY2FzdDxn
bEdldEFjdGl2ZVVuaWZvcm1UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldEFjdGl2ZVVu
aWZvcm0iKSk7CisgICAgZ2V0QXR0cmliTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGdsR2V0
QXR0cmliTG9jYXRpb25UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldEF0dHJpYkxvY2F0
aW9uIikpOworICAgIGdldEJ1ZmZlclBhcmFtZXRlcml2ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdl
dEJ1ZmZlclBhcmFtZXRlcml2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRCdWZmZXJQ
YXJhbWV0ZXJpdiIpKTsKKyAgICBnZXRCdWZmZXJTdWJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxn
bEdldEJ1ZmZlclN1YkRhdGFUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldEJ1ZmZlclN1
YkRhdGEiKSk7CisgICAgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYgPSByZWlu
dGVycHJldF9jYXN0PGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZUeXBlPihn
ZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
IikpOworICAgIGdldFByb2dyYW1JbmZvTG9nID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFByb2dy
YW1JbmZvTG9nVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRQcm9ncmFtSW5mb0xvZyIp
KTsKKyAgICBnZXRQcm9ncmFtaXYgPSByZWludGVycHJldF9jYXN0PGdsR2V0UHJvZ3JhbWl2VHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRQcm9ncmFtaXYiKSk7CisgICAgZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXYgPSByZWludGVycHJldF9jYXN0PGdsR2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcml2IikpOworICAgIGdldFNoYWRlckluZm9Mb2cgPSByZWludGVycHJldF9jYXN0PGdsR2V0
U2hhZGVySW5mb0xvZ1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0U2hhZGVySW5mb0xv
ZyIpKTsKKyAgICBnZXRTaGFkZXJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRTaGFkZXJpdlR5
cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0U2hhZGVyaXYiKSk7CisgICAgZ2V0U2hhZGVy
U291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFNoYWRlclNvdXJjZVR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsR2V0U2hhZGVyU291cmNlIikpOworICAgIGdldFVuaWZvcm1mdiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xHZXRVbmlmb3JtZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJn
bEdldFVuaWZvcm1mdiIpKTsKKyAgICBnZXRVbmlmb3JtaXYgPSByZWludGVycHJldF9jYXN0PGds
R2V0VW5pZm9ybWl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRVbmlmb3JtaXYiKSk7
CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFVuaWZvcm1M
b2NhdGlvblR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0VW5pZm9ybUxvY2F0aW9uIikp
OworICAgIGdldFZlcnRleEF0dHJpYmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFZlcnRleEF0
dHJpYmZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRWZXJ0ZXhBdHRyaWJmdiIpKTsK
KyAgICBnZXRWZXJ0ZXhBdHRyaWJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRWZXJ0ZXhBdHRy
aWJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0VmVydGV4QXR0cmliaXYiKSk7Cisg
ICAgZ2V0VmVydGV4QXR0cmliUG9pbnRlcnYgPSByZWludGVycHJldF9jYXN0PGdsR2V0VmVydGV4
QXR0cmliUG9pbnRlcnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldFZlcnRleEF0dHJp
YlBvaW50ZXJ2IikpOworICAgIGlzQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbElzQnVmZmVy
VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xJc0J1ZmZlciIpKTsKKyAgICBpc0ZyYW1lYnVm
ZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbElzRnJhbWVidWZmZXJUeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbElzRnJhbWVidWZmZXIiKSk7CisgICAgaXNQcm9ncmFtID0gcmVpbnRlcnByZXRf
Y2FzdDxnbElzUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsSXNQcm9ncmFtIikp
OworICAgIGlzUmVuZGVyYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbElzUmVuZGVyYnVmZmVy
VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xJc1JlbmRlcmJ1ZmZlciIpKTsKKyAgICBpc1No
YWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xJc1NoYWRlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0
eCwgImdsSXNTaGFkZXIiKSk7CisgICAgbGlua1Byb2dyYW0gPSByZWludGVycHJldF9jYXN0PGds
TGlua1Byb2dyYW1UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbExpbmtQcm9ncmFtIikpOwor
ICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGdsUmVuZGVyYnVmZmVy
U3RvcmFnZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsUmVuZGVyYnVmZmVyU3RvcmFnZSIp
KTsKKyAgICBzaGFkZXJTb3VyY2UgPSByZWludGVycHJldF9jYXN0PGdsU2hhZGVyU291cmNlVHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xTaGFkZXJTb3VyY2UiKSk7CisgICAgc3RlbmNpbEZ1
bmNTZXBhcmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xTdGVuY2lsRnVuY1NlcGFyYXRlVHlwZT4o
Z2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xTdGVuY2lsRnVuY1NlcGFyYXRlIikpOworICAgIHN0ZW5j
aWxNYXNrU2VwYXJhdGUgPSByZWludGVycHJldF9jYXN0PGdsU3RlbmNpbE1hc2tTZXBhcmF0ZVR5
cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsU3RlbmNpbE1hc2tTZXBhcmF0ZSIpKTsKKyAgICBz
dGVuY2lsT3BTZXBhcmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xTdGVuY2lsT3BTZXBhcmF0ZVR5
cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsU3RlbmNpbE9wU2VwYXJhdGUiKSk7CisgICAgdW5p
Zm9ybTFmID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0xZlR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsVW5pZm9ybTFmIikpOworICAgIHVuaWZvcm0xZnYgPSByZWludGVycHJldF9jYXN0
PGdsVW5pZm9ybTFmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTFmdiIpKTsK
KyAgICB1bmlmb3JtMWkgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTFpVHlwZT4oZ2V0UHJv
Y0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMWkiKSk7CisgICAgdW5pZm9ybTFpdiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Z2xVbmlmb3JtMWl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3Jt
MWl2IikpOworICAgIHVuaWZvcm0yZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtMmZUeXBl
PihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0yZiIpKTsKKyAgICB1bmlmb3JtMmZ2ID0g
cmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0yZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJn
bFVuaWZvcm0yZnYiKSk7CisgICAgdW5pZm9ybTJpID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZv
cm0yaVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTJpIikpOworICAgIHVuaWZv
cm0yaXYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTJpdlR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsVW5pZm9ybTJpdiIpKTsKKyAgICB1bmlmb3JtM2YgPSByZWludGVycHJldF9jYXN0
PGdsVW5pZm9ybTNmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtM2YiKSk7Cisg
ICAgdW5pZm9ybTNmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtM2Z2VHlwZT4oZ2V0UHJv
Y0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtM2Z2IikpOworICAgIHVuaWZvcm0zaSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Z2xVbmlmb3JtM2lUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0z
aSIpKTsKKyAgICB1bmlmb3JtM2l2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0zaXZUeXBl
PihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0zaXYiKSk7CisgICAgdW5pZm9ybTRmID0g
cmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm00ZlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
VW5pZm9ybTRmIikpOworICAgIHVuaWZvcm00ZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9y
bTRmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTRmdiIpKTsKKyAgICB1bmlm
b3JtNGkgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTRpVHlwZT4oZ2V0UHJvY0FkZHJlc3Mo
Y3R4LCAiZ2xVbmlmb3JtNGkiKSk7CisgICAgdW5pZm9ybTRpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Z2xVbmlmb3JtNGl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtNGl2IikpOwor
ICAgIHVuaWZvcm1NYXRyaXgyZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybU1hdHJpeDJm
dlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJpeDJmdiIpKTsKKyAgICB1
bmlmb3JtTWF0cml4MngzZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybU1hdHJpeDJ4M2Z2
VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtTWF0cml4MngzZnYiKSk7CisgICAg
dW5pZm9ybU1hdHJpeDJ4NGZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm1NYXRyaXgyeDRm
dlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJpeDJ4NGZ2IikpOworICAg
IHVuaWZvcm1NYXRyaXgzZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybU1hdHJpeDNmdlR5
cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJpeDNmdiIpKTsKKyAgICB1bmlm
b3JtTWF0cml4M3gyZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybU1hdHJpeDN4MmZ2VHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtTWF0cml4M3gyZnYiKSk7CisgICAgdW5p
Zm9ybU1hdHJpeDN4NGZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm1NYXRyaXgzeDRmdlR5
cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJpeDN4NGZ2IikpOworICAgIHVu
aWZvcm1NYXRyaXg0ZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybU1hdHJpeDRmdlR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJpeDRmdiIpKTsKKyAgICB1bmlmb3Jt
TWF0cml4NHgyZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybU1hdHJpeDR4MmZ2VHlwZT4o
Z2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtTWF0cml4NHgyZnYiKSk7CisgICAgdW5pZm9y
bU1hdHJpeDR4M2Z2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm1NYXRyaXg0eDNmdlR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJpeDR4M2Z2IikpOworICAgIHVzZVBy
b2dyYW0gPSByZWludGVycHJldF9jYXN0PGdsVXNlUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsVXNlUHJvZ3JhbSIpKTsKKyAgICB2YWxpZGF0ZVByb2dyYW0gPSByZWludGVycHJl
dF9jYXN0PGdsVmFsaWRhdGVQcm9ncmFtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xWYWxp
ZGF0ZVByb2dyYW0iKSk7CisgICAgdmVydGV4QXR0cmliMWYgPSByZWludGVycHJldF9jYXN0PGds
VmVydGV4QXR0cmliMWZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjFm
IikpOworICAgIHZlcnRleEF0dHJpYjFmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRy
aWIxZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjFmdiIpKTsKKyAg
ICB2ZXJ0ZXhBdHRyaWIyZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRyaWIyZlR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVmVydGV4QXR0cmliMmYiKSk7CisgICAgdmVydGV4QXR0
cmliMmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjJmdlR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsVmVydGV4QXR0cmliMmZ2IikpOworICAgIHZlcnRleEF0dHJpYjNmID0g
cmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjNmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xWZXJ0ZXhBdHRyaWIzZiIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWIzZnYgPSByZWludGVycHJl
dF9jYXN0PGdsVmVydGV4QXR0cmliM2Z2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xWZXJ0
ZXhBdHRyaWIzZnYiKSk7CisgICAgdmVydGV4QXR0cmliNGYgPSByZWludGVycHJldF9jYXN0PGds
VmVydGV4QXR0cmliNGZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjRm
IikpOworICAgIHZlcnRleEF0dHJpYjRmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRy
aWI0ZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjRmdiIpKTsKKyAg
ICB2ZXJ0ZXhBdHRyaWJQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYlBv
aW50ZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYlBvaW50ZXIiKSk7
CisKKyAgICBpZiAoIW1fdmFsaWQpIHsKKyAgICAgICAgcVdhcm5pbmcoIkdyYXBoaWNzQ29udGV4
dDNEOiBBbGwgbmVlZGVkIE9wZW5HTCBleHRlbnNpb25zIGFyZSBub3QgYXZhaWxhYmxlIik7Cisg
ICAgICAgIG1fdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGds
R2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtX3RleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IEdMX1JHQkEsIDEsIDEsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKyAgICBnZW5GcmFtZWJ1ZmZlcnMoMSwg
Jm1fbWFpbkZibyk7CisgICAgbV9jdXJyZW50RmJvID0gbV9tYWluRmJvOworCisgICAgYmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tYWluRmJvKTsKKwor
ICAgIGdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgIGJpbmRSZW5kZXJi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Cisg
ICAgcmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBH
TF9ERVBUSF9DT01QT05FTlQsIDEsIDEpOworICAgIGJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisgCisgICAgZnJhbWVidWZmZXJUZXh0dXJlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworCisgICAg
aWYgKGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
KSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAg
cVdhcm5pbmcoKSA8PCAiR3JhcGhpY3NDb250ZXh0M0Q6IEludmFsaWQgRkJPIjsKKyAgICAgICAg
bV92YWxpZCA9IGZhbHNlOworICAgIH0KK30KKworR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQoreworICAgIGRlbGV0ZSBtX2dsV2lkZ2V0Owor
ICAgIG1fZ2xXaWRnZXQgPSAwOworfQorCit2b2lkKiBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpnZXRQcm9jQWRkcmVzcyhjb25zdCBRR0xDb250ZXh0KiBjdHgsIGNvbnN0IFFTdHJpbmcmIHBy
b2MpCit7CisgICAgUVN0cmluZyBleHRbM10gPSB7ICIiLCAiQVJCIiwgIkVYVCIgfTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgIHZvaWQqIGFkZHIgPSBjdHgt
PmdldFByb2NBZGRyZXNzKHByb2MgKyBleHRbaV0pOworICAgICAgICBpZiAoYWRkcikgCisgICAg
ICAgICAgICByZXR1cm4gYWRkcjsKKyAgICB9CisKKyAgICBtX3ZhbGlkID0gZmFsc2U7CisgICAg
cmV0dXJuIDA7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCit7Cisg
ICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KG5ldyBHcmFwaGljc0NvbnRleHQz
RChhdHRycykpOworICAgIHJldHVybiBjb250ZXh0LT5tX2ludGVybmFsID8gY29udGV4dC5yZWxl
YXNlKCkgOiAwOworfQorCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCisgICAgOiBtX2ludGVybmFsKG5ldyBH
cmFwaGljc0NvbnRleHQzREludGVybmFsKGF0dHJzKSkKK3sKKyAgICBpZiAoIW1faW50ZXJuYWwt
PmlzVmFsaWQoKSkgCisgICAgICAgIG1faW50ZXJuYWwgPSAwOworfQorCitHcmFwaGljc0NvbnRl
eHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKK3sKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCit7Cisg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQ7Cit9CisKK1BsYXRmb3JtM0RPYmplY3Qg
R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faW50ZXJuYWwtPm1fdGV4dHVyZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFr
ZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworCisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQt
PmNhbnZhcygpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVy
KCk7CisKKyAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX2ludGVybmFsLT5tX21haW5GYm8pOworCisgICAgZ2xSZWFkUGl4ZWxz
KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIG1faW50ZXJuYWwtPm1fcGl4ZWxzLmJpdHMoKSk7CisKKyAgICBRUGFpbnRlciog
cCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgIHAtPmRy
YXdJbWFnZSgwLCAwLCBtX2ludGVybmFsLT5tX3BpeGVscy50cmFuc2Zvcm1lZChRTWF0cml4KCku
cm90YXRlKDE4MCkpKTsKKworICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1faW50ZXJuYWwtPm1fY3VycmVudEZibyk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KCkKK3sKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgaWYgKCgo
d2lkdGggPT0gbV9jdXJyZW50V2lkdGgpICYmIChoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KSkg
fHwgKCFtX2ludGVybmFsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY3VycmVudFdp
ZHRoID0gd2lkdGg7CisgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OworCisgICAgbV9pbnRl
cm5hbC0+bV9waXhlbHMgPSBRSW1hZ2UobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwg
UUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faW50ZXJu
YWwtPm1fdGV4dHVyZSk7CisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JH
QkEsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAg
IGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAKKyAgICBtX2ludGVybmFsLT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ludGVybmFs
LT5tX21haW5GYm8pOworICAgIG1faW50ZXJuYWwtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9pbnRlcm5hbC0+bV9kZXB0aEJ1ZmZlcik7CisgICAg
bV9pbnRlcm5hbC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBHTF9ERVBUSF9DT01QT05FTlQsIHdpZHRoLCBoZWlnaHQpOworICAgIG1faW50ZXJu
YWwtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7
CisgICAgCisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAs
IEdMX1RFWFRVUkVfMkQsIG1faW50ZXJuYWwtPm1fdGV4dHVyZSwgMCk7CisgICAgbV9pbnRlcm5h
bC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgbV9pbnRlcm5hbC0+bV9kZXB0aEJ1ZmZlcik7CisKKyAgICBHTGVudW0g
c3RhdHVzID0gbV9pbnRlcm5hbC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNz
Q29udGV4dDNEOiBJbnZhbGlkIEZCTyI7CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
fQorCisgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKKyAgICBnbEZsdXNoKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0
ZXh0dXJlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVy
KQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmF0dGFj
aFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgKEdMdWludCkgc2hhZGVyLT5vYmpl
Y3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5iaW5kQXR0cmliTG9jYXRpb24oKEdM
dWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBXZWJHTEJ1ZmZlciogYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlciA/
IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVm
ZmVyKiBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT5tX2N1cnJlbnRGYm8gPSAoYnVmZmVyICYmIGJ1ZmZlci0+b2Jq
ZWN0KCkpID8gKEdMdWludCkgYnVmZmVyLT5vYmplY3QoKSA6IG1faW50ZXJuYWwtPm1fbWFpbkZi
bzsKKyAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBtX2ludGVybmFsLT5t
X2N1cnJlbnRGYm8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVm
ZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVy
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlciA/IChHTHVpbnQp
IHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVy
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGds
QmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlID8gKEdMdWludCkgdGV4dHVyZS0+b2JqZWN0KCkg
OiAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihkb3VibGUgcmVk
LCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEJsZW5kQ29sb3Ioc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHJlZCksIHN0YXRpY19jYXN0PGZsb2F0PihncmVlbiksIHN0YXRpY19jYXN0
PGZsb2F0PihibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9uZyBtb2RlKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xCbGVuZEVxdWF0
aW9uKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJu
YWwtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNp
Z25lZCBsb25nIGRmYWN0b3IpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30gICAgICAgCisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcg
c3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5z
aWduZWQgbG9uZyBkc3RBbHBoYSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0
UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
dWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1
c2FnZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdl
YkdMQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBsb25nIHVzYWdlKQoreworICAgIGlmICghYXJyYXkg
fHwgIWFycmF5LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YnVmZmVyRGF0
YSh0YXJnZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpLCB1c2Fn
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQg
bG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBXZWJHTEFycmF5KiBhcnJheSkKK3sKKyAgICBpZiAo
IWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJ1
ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5i
YXNlQWRkcmVzcygpKTsKK30KKwordW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNsZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJsZSBnLCBkb3VibGUgYiwgZG91YmxlIGEpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENsZWFy
Q29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KHIpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZyksIHN0YXRp
Y19jYXN0PGZsb2F0PihiKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGEpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y2xlYXIodW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDbGVhcihtYXNrKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChkb3VibGUgZGVwdGgpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyNpZiBkZWZpbmVkKFFUX09Q
RU5HTF9FU18yKQorICAgIGdsQ2xlYXJEZXB0aGYoZGVwdGgpOworI2Vsc2UKKyAgICBnbENsZWFy
RGVwdGgoZGVwdGgpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFy
U3RlbmNpbChsb25nIHMpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIGdsQ2xlYXJTdGVuY2lsZihz
KTsKKyNlbHNlCisgICAgZ2xDbGVhclN0ZW5jaWwocyk7CisjZW5kaWYKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUs
IGJvb2wgYWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sK
KyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPmNvbXBpbGVTaGFkZXIoKEdMdWludCkgc2hhZGVyLT5v
YmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9y
bWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQsIGxvbmcgYm9yZGVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2
ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEN1bGxGYWNlKG1v
ZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmModW5zaWduZWQgbG9u
ZyBmdW5jKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xEZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRo
TWFzayhib29sIGZsYWcpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBnbERlcHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVwdGhSYW5nZShkb3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNf
MikKKyAgICBnbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFyKTsKKyNlbHNlCisgICAgZ2xEZXB0aFJh
bmdlKHpOZWFyLCB6RmFyKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpk
ZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyKQor
eworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmRldGFjaFNo
YWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgKEdMdWludCkgc2hhZGVyLT5vYmplY3Qo
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUodW5zaWduZWQgbG9uZyBj
YXApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bERpc2FibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlz
KHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRHJhd0FycmF5cyhtb2Rl
LCBmaXJzdCwgY291bnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxlbWVu
dHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25n
IHR5cGUsIGxvbmcgb2Zmc2V0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgZ2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRW5hYmxlKGNhcCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVu
c2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEZpbmlzaCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBX
ZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
dGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQp
IGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJh
bWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0
YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwg
bG9uZyBsZXZlbCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVu
dCwgdGV4dGFyZ2V0LCB0ZXh0dXJlID8gKEdMdWludCkgdGV4dHVyZS0+b2JqZWN0KCkgOiAwLCBs
ZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZSh1bnNpZ25lZCBs
b25nIG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBnbEZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2Vu
ZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5nZW5lcmF0ZU1pcG1hcCh0
YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZv
KQoreworICAgIGlmICghcHJvZ3JhbS0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbWF4
TGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFByb2dyYW1pdihzdGF0aWNfY2FzdDxHTHVpbnQ+
KHByb2dyYW0tPm9iamVjdCgpKSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4
TGVuZ3RoKTsKKworICAgIEdMY2hhciBuYW1lW21heExlbmd0aF07IAorICAgIEdMc2l6ZWkgbmFt
ZUxlbmd0aDsKKyAgICBHTGludCBzaXplOworICAgIEdMZW51bSB0eXBlOworCisgICAgbV9pbnRl
cm5hbC0+Z2V0QWN0aXZlQXR0cmliKHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0
KCkpLCBpbmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsK
KworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5m
by5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7
CisgICAgaW5mby5zaXplID0gc2l6ZTsKKworICAgIHJldHVybiB0cnVlOworfQorICAgIAorYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dy
YW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFw
cm9ncmFtLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBHTGludCBtYXhMZW5ndGg7CisgICAgbV9p
bnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0
KCkpLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4TGVuZ3RoKTsKKworICAgIEdM
Y2hhciBuYW1lW21heExlbmd0aF07CisgICAgR0xzaXplaSBuYW1lTGVuZ3RoOworICAgIEdMaW50
IHNpemU7CisgICAgR0xlbnVtIHR5cGU7CisKKyAgICBtX2ludGVybmFsLT5nZXRBY3RpdmVVbmlm
b3JtKHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0KCkpLCBpbmRleCwgbWF4TGVu
Z3RoLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKworICAgIGlmICghbmFtZUxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5h
bWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0g
c2l6ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIAorICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJu
YWwtPmdldEF0dHJpYkxvY2F0aW9uKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpOworfQorCitHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQoreworICAgIHJldHVybiBtX2ludGVy
bmFsLT5tX2F0dHJzOworfQorCit1bnNpZ25lZCBsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRF
cnJvcigpCit7CisgICAgaWYgKG1faW50ZXJuYWwtPm1fc3ludGhldGljRXJyb3JzLnNpemUoKSA+
IDApIHsKKyAgICAgICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOworICAgICAgICB1bnNpZ25l
ZCBsb25nIGVyciA9ICppdGVyOworICAgICAgICBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9y
cy5yZW1vdmUoaXRlcik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xHZXRFcnJvcigp
OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyh1bnNpZ25lZCBsb25n
IG5hbWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICByZXR1cm4gU3RyaW5nKChjb25zdCBjaGFyKikgZ2xHZXRTdHJpbmcobmFtZSkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzQnVmZmVyKChHTHVpbnQpIGJ1
ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQo
dW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xJc0VuYWJsZWQoY2FwKTsKK30KKworYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikK
K3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9p
bnRlcm5hbC0+aXNGcmFtZWJ1ZmZlcigoR0x1aW50KSBmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1f
aW50ZXJuYWwtPmlzUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiBy
ZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIHJldHVybiBtX2ludGVybmFsLT5pc1JlbmRlcmJ1ZmZlcigoR0x1aW50KSByZW5kZXJidWZm
ZXItPm9iamVjdCgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoV2Vi
R0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzU2hhZGVyKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkp
OworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUoV2ViR0xUZXh0dXJlKiB0
ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJu
IGdsSXNUZXh0dXJlKChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6bGluZVdpZHRoKGRvdWJsZSB3aWR0aCkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsTGluZVdpZHRoKHN0YXRpY19jYXN0
PGZsb2F0Pih3aWR0aCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3Jh
bShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+bGlu
a1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpwaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xQaXhl
bFN0b3JlaShwbmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5
Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cykKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsUG9seWdvbk9mZnNldChzdGF0aWNf
Y2FzdDxmbG9hdD4oZmFjdG9yKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHVuaXRzKSk7Cit9CisKK1Bh
c3NSZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMobG9uZyB4
LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNp
Z25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgCisgICAgaWYgKHR5cGUgIT0gR0xfVU5T
SUdORURfQllURSB8fCBmb3JtYXQgIT0gR0xfUkdCQSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIAorICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBhcnJheSA9IFdlYkdMVW5z
aWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgIGdsUmVhZFBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIChHTHZvaWQqKSBhcnJheS0+
ZGF0YSgpKTsKKyAgICByZXR1cm4gYXJyYXk7ICAgIAorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX2ludGVybmFsLT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
YW1wbGVDb3ZlcmFnZShkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0KQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xTYW1wbGVDb3ZlcmFnZShzdGF0
aWNfY2FzdDxmbG9hdD4odmFsdWUpLCBpbnZlcnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIGdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIAorICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgY29uc3QgQ1N0cmluZyYgY3MgPSBz
dHJpbmcudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIHMgPSBjcy5kYXRhKCk7CisgICAgCisgICAg
aW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBtX2ludGVybmFsLT5zaGFkZXJTb3Vy
Y2UoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgMSwgJnMsICZsZW5ndGgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcg
cmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9u
ZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2sp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU3Rl
bmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNr
U2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5z
dGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1
bnNpZ25lZCBsb25nIHpwYXNzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgZ2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNl
LCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcg
enBhc3MpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3Mp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5h
bWUsIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCB2
YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IGdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKGxvbmcgbG9jYXRpb24s
IGZsb2F0IHYwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBp
bnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYw
LCBmbG9hdCB2MSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogYXJy
YXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YobG9uZyBsb2NhdGlvbiwgZmxv
YXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zZihsb2NhdGlvbiwgdjAs
IHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYobG9uZyBs
b2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zZnYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRm
KGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRl
cm5hbC0+dW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBp
bnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1faW50ZXJuYWwtPnVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB2MCkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPnVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogYXJyYXksIGludCBzaXplKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT51bmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiBhcnJheSwgaW50IHNpemUpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT51bmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYy
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+dW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQg
c2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPnVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50
IHYxLCBpbnQgdjIsIGludCB2MykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2
MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KGxvbmcgbG9j
YXRpb24sIGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTRpdihsb2NhdGlvbiwg
c2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4
MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogYXJyYXksIGludCBzaXpl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJh
eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51
bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBi
b29sIHRyYW5zcG9zZSwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRy
aXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBB
U1NFUlQocHJvZ3JhbSk7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51c2VQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9i
amVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgCisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52
YWxpZGF0ZVByb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0
IHYwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMWYoaW5keCwgdjApOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJy
YXkpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYw
LCBmbG9hdCB2MSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjJmKGluZHgsIHYwLCB2MSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgs
IGZsb2F0KiBhcnJheSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjJmdihpbmR4LCBhcnJheSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5k
eCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjNmKGlu
ZHgsIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRy
aWIzZnYoaW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIs
IGZsb2F0IHYzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliNGYoaW5keCwgdjAsIHYxLCB2MiwgdjMpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9u
ZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgYXJyYXkp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2ln
bmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2ln
bmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJp
YlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFZpZXdwb3J0KHN0YXRpY19jYXN0PEdMaW50Pih4
KSwgc3RhdGljX2Nhc3Q8R0xpbnQ+KHkpLCBzdGF0aWNfY2FzdDxHTHNpemVpPih3aWR0aCksIHN0
YXRpY19jYXN0PEdMc2l6ZWk+KGhlaWdodCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lLCB1bnNpZ25lZCBjaGFyKiB2YWx1ZSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0
Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
QnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5h
bWUsIGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX2ludGVybmFsLT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25l
ZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25l
ZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydih1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQq
IHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBu
YW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KChHTHVpbnQpIHByb2dyYW0tPm9i
amVjdCgpLCBwbmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbGVuZ3RoOworICAgIG1f
aW50ZXJuYWwtPmdldFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgR0xfSU5G
T19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAgIEdMc2l6ZWkgc2l6ZTsKKworICAgIEdMY2hh
ciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CisgICAgaWYgKCFpbmZvKQor
ICAgICAgICByZXR1cm4gIiI7CisKKyAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtSW5mb0xvZygo
R0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisKKyAgICBT
dHJpbmcgcmVzdWx0KGluZm8pOworICAgIGZhc3RGcmVlKGluZm8pOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFs
dWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X2ludGVybmFsLT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFdlYkdMU2hhZGVy
KiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgQVNTRVJU
KHNoYWRlcik7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT5nZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBwbmFt
ZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9M
b2coV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFNo
YWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxl
bmd0aCk7CisKKyAgICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciop
IGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoIWluZm8pCisgICAgICAgIHJldHVybiAiIjsK
KworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlckluZm9Mb2coKEdMdWludCkgc2hhZGVyLT5vYmpl
Y3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisKKyAgICBTdHJpbmcgcmVzdWx0KGluZm8pOwor
ICAgIGZhc3RGcmVlKGluZm8pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RyaW5nIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQg
bGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2Jq
ZWN0KCksIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbGVuZ3RoKTsKKworICAgIEdMc2l6ZWkg
c2l6ZTsKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOwor
ICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgbV9pbnRlcm5hbC0+Z2V0
U2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGlu
Zm8pOworCisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZvKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBh
cmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9h
dCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldFRleFBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9y
bWZ2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgZmxvYXQqIHZhbHVlKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRl
cm5hbC0+Z2V0VW5pZm9ybWZ2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBsb2NhdGlvbiwg
dmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VW5p
Zm9ybWl2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBsb2NhdGlvbiwgdmFsdWUpOworfQor
Citsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOwor
ICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0
dXJuIG1faW50ZXJuYWwtPmdldFVuaWZvcm1Mb2NhdGlvbigoR0x1aW50KSBwcm9ncmFtLT5vYmpl
Y3QoKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFt
ZSwgZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KHVu
c2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKworbG9uZyBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgs
IHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICAKKyAgICB2b2lkKiBwb2ludGVyOworICAgIG1faW50ZXJuYWwtPmdl
dFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGxvbmc+KHBvaW50ZXIpOworfQorCitpbnQgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWdu
ZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2ln
bmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMp
Cit7CisgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsK
K30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgbGV2ZWwsIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhKQoreworICAgIEFTU0VSVChpbWFnZSk7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIFFJbWFnZTo6Rm9ybWF0IGZvcm1hdCA9ICgh
cHJlbXVsdGlwbHlBbHBoYSkgPyBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIgOgorICAgICAgICBRSW1h
Z2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZDsKKyAgICBRTWF0cml4IHRyID0gUU1hdHJp
eCgpLnJvdGF0ZShmbGlwWSA/IDE4MCA6IDApOworICAgIFFQaXhtYXAqIG5hdGl2ZVBpeG1hcCA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOyAKKyAgICBRSW1hZ2UgbmF0aXZl
SW1hZ2UgPSBuYXRpdmVQaXhtYXAtPnRvSW1hZ2UoKS5jb252ZXJ0VG9Gb3JtYXQoZm9ybWF0KS50
cmFuc2Zvcm1lZCh0cik7CisKKyAgICBnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgR0xfUkdC
QSwgbmF0aXZlSW1hZ2Uud2lkdGgoKSwgbmF0aXZlSW1hZ2UuaGVpZ2h0KCksIDAsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICBuYXRpdmVJbWFnZS5iaXRzKCkpOworCisg
ICAgcmV0dXJuIDA7Cit9CisgICAgCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdl
MkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWdu
ZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0
LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgZ2xUZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVu
c2lnbmVkIHlvZmYsIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhKQoreworICAgIEFTU0VSVChpbWFnZSk7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIFFJbWFnZTo6Rm9ybWF0IGZvcm1hdCA9ICghcHJl
bXVsdGlwbHlBbHBoYSkgPyBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIgOgorICAgICAgICBRSW1hZ2U6
OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZDsKKyAgICBRTWF0cml4IHRyID0gUU1hdHJpeCgp
LnJvdGF0ZShmbGlwWSA/IDE4MCA6IDApOworICAgIFFQaXhtYXAqIG5hdGl2ZVBpeG1hcCA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOyAKKyAgICBRSW1hZ2UgbmF0aXZlSW1h
Z2UgPSBuYXRpdmVQaXhtYXAtPnRvSW1hZ2UoKS5jb252ZXJ0VG9Gb3JtYXQoZm9ybWF0KS50cmFu
c2Zvcm1lZCh0cik7CisgICAgCisgICAgZ2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmYsIHlvZmYsIG5hdGl2ZUltYWdlLndpZHRoKCksIG5hdGl2ZUltYWdlLmhlaWdodCgpLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCBuYXRpdmVJbWFnZS5iaXRzKCkpOworICAgIHJldHVybiAw
OworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIEdMdWludCBvOwor
ICAgIG1faW50ZXJuYWwtPmdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit1
bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgR0x1aW50IG87CisgICAg
bV9pbnRlcm5hbC0+Z2VuRnJhbWVidWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwor
dW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwt
PmNyZWF0ZVByb2dyYW0oKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBHTHVpbnQgbzsKKyAgICBtX2ludGVybmFsLT5nZW5SZW5kZXJidWZmZXJzKDEs
ICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlU2hhZGVy
KCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJU
RVhfU0hBREVSKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1
cmUoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
R0x1aW50IG87CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT5kZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0
ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkZWxldGVQcm9ncmFtKHVuc2lnbmVkIHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVQcm9ncmFt
KHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZm
ZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
cmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVy
KHVuc2lnbmVkIHNoYWRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVRl
eHR1cmVzKDEsICZ0ZXh0dXJlKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpzaXplSW5C
eXRlcyhpbnQgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdMX0JZVEU6
CisgICAgICAgIHJldHVybiBzaXplb2YoR0xieXRlKTsKKyAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1Ynl0ZSk7CisgICAgY2FzZSBHTF9TSE9SVDoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihHTHNob3J0KTsKKyAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdXNob3J0KTsKKyAgICBjYXNlIEdMX0lOVDoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7CisgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6
CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJy
b3IodW5zaWduZWQgbG9uZyBlcnJvcikKK3sKKyAgICBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vy
cm9ycy5hZGQoZXJyb3IpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwIGIvV2ViS2l0L3F0L0Fw
aS9xd2Vic2V0dGluZ3MuY3BwCmluZGV4IGQ2MGYwOWMuLmU2ZmRmNjEgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0
aW5ncy5jcHAKQEAgLTE1OCw2ICsxNTgsMTMgQEAgdm9pZCBRV2ViU2V0dGluZ3NQcml2YXRlOjph
cHBseSgpCiAKICAgICAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkKHZhbHVlKTsKICNlbmRpZgorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgICAgIHZhbHVl
ID0gYXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0
dGluZ3M6OldlYkdMRW5hYmxlZCkpOworCisgICAgICAgIHNldHRpbmdzLT5zZXRXZWJHTEVuYWJs
ZWQodmFsdWUpOworI2VuZGlmCisgCiAgICAgICAgIHZhbHVlID0gYXR0cmlidXRlcy52YWx1ZShR
V2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLT5hdHRyaWJ1dGVzLnZhbHVlKFFXZWJTZXR0aW5n
czo6SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzKSk7CiAgICAgICAgIHNldHRpbmdzLT5zZXRKYXZh
U2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KHZhbHVlKTsKQEAgLTQwMSw2ICs0MDgs
NyBAQCBRV2ViU2V0dGluZ3M6OlFXZWJTZXR0aW5ncygpCiAgICAgZC0+YXR0cmlidXRlcy5pbnNl
cnQoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxzLCBmYWxzZSk7
CiAgICAgZC0+YXR0cmlidXRlcy5pbnNlcnQoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5B
Y2Nlc3NGaWxlVXJscywgdHJ1ZSk7CiAgICAgZC0+YXR0cmlidXRlcy5pbnNlcnQoUVdlYlNldHRp
bmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgZmFsc2UpOworICAgIGQtPmF0dHJp
YnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkLCBmYWxzZSk7CiAgICAgZC0+
b2ZmbGluZVN0b3JhZ2VEZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7CiAgICAgZC0+ZGVm
YXVsdFRleHRFbmNvZGluZyA9IFFMYXRpbjFTdHJpbmcoImlzby04ODU5LTEiKTsKIH0KZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJz
ZXR0aW5ncy5oCmluZGV4IGIxZjVjZjIuLjI5YzAxYjYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9B
cGkvcXdlYnNldHRpbmdzLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaApAQCAt
NzAsNyArNzAsOCBAQCBwdWJsaWM6CiAgICAgICAgIExvY2FsQ29udGVudENhbkFjY2Vzc0ZpbGVV
cmxzLAogICAgICAgICBEbnNQcmVmZXRjaEVuYWJsZWQsCiAgICAgICAgIFhTU0F1ZGl0b3JFbmFi
bGVkLAotICAgICAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZAorICAgICAgICBBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwKKyAgICAgICAgV2ViR0xFbmFibGVkCiAgICAgfTsK
ICAgICBlbnVtIFdlYkdyYXBoaWMgewogICAgICAgICBNaXNzaW5nSW1hZ2VHcmFwaGljLApkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L1FHVkxhdW5jaGVyL21haW4uY3BwIGIvV2ViS2l0L3F0L1FHVkxh
dW5jaGVyL21haW4uY3BwCmluZGV4IDQ0OGI0YjAuLjMwN2UxMTggMTAwNjQ0Ci0tLSBhL1dlYktp
dC9xdC9RR1ZMYXVuY2hlci9tYWluLmNwcAorKysgYi9XZWJLaXQvcXQvUUdWTGF1bmNoZXIvbWFp
bi5jcHAKQEAgLTUyMSw2ICs1MjEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
CiAgICAgICAgIHVybCA9IGFyZ3MuYXQoMSk7CiAgICAgaWYgKGFyZ3MuY29udGFpbnMoIi0tY29t
cG9zaXRpbmciKSkKICAgICAgICAgUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpLT5zZXRB
dHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgdHJ1
ZSk7CisgICAgaWYgKGFyZ3MuY29udGFpbnMoIi0td2ViZ2wiKSkKKyAgICAgICAgUVdlYlNldHRp
bmdzOjpnbG9iYWxTZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpXZWJHTEVu
YWJsZWQsIHRydWUpOwogCiAgICAgTWFpbldpbmRvdyogd2luZG93ID0gbmV3IE1haW5XaW5kb3c7
CiAgICAgd2luZG93LT5sb2FkKHVybCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9RdExhdW5j
aGVyL21haW4uY3BwIGIvV2ViS2l0VG9vbHMvUXRMYXVuY2hlci9tYWluLmNwcAppbmRleCBjNzI1
YzJmLi5iODljMDAzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9RdExhdW5jaGVyL21haW4uY3Bw
CisrKyBiL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAKQEAgLTExNiw2ICsxMTYsNyBA
QCBwcm90ZWN0ZWQgc2xvdHM6CiAKICAgICB2b2lkIHNldFRvdWNoTW9ja2luZyhib29sIG9uKTsK
ICAgICB2b2lkIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCB0b2dnbGUpOworICAg
IHZvaWQgdG9nZ2xlV2ViR0woYm9vbCB0b2dnbGUpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVZpZXco
Ym9vbCB1c2VHcmFwaGljc1ZpZXcgPSBmYWxzZSk7CiAKIHB1YmxpYyBzbG90czoKQEAgLTQ0Myw2
ICs0NDQsMTEgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZyhib29sIHRvZ2dsZSkKICAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShR
V2ViU2V0dGluZ3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCB0b2dnbGUpOwogfQog
Cit2b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVXZWJHTChib29sIHRvZ2dsZSkKK3sKKyAgICBw
YWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxl
ZCwgdG9nZ2xlKTsKK30KKwogdm9pZCBMYXVuY2hlcldpbmRvdzo6aW5pdGlhbGl6ZVZpZXcoYm9v
bCB1c2VHcmFwaGljc1ZpZXcpCiB7CiAgICAgZGVsZXRlIG1fdmlldzsKQEAgLTU0NCw2ICs1NTAs
MTAgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6c2V0dXBVSSgpCiAgICAgdG9nZ2xlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZy0+c2V0Q2hlY2thYmxlKHRydWUpOwogICAgIHRvZ2dsZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmctPnNldENoZWNrZWQoZmFsc2UpOwogCisgICAgUUFjdGlvbiogdG9nZ2xlV2Vi
R0wgPSB0b29sc01lbnUtPmFkZEFjdGlvbigiVG9nZ2xlIFdlYkdMIiwgdGhpcywgU0xPVCh0b2dn
bGVXZWJHTChib29sKSkpOworICAgIHRvZ2dsZVdlYkdMLT5zZXRDaGVja2FibGUodHJ1ZSk7Cisg
ICAgdG9nZ2xlV2ViR0wtPnNldENoZWNrZWQoZmFsc2UpOworCiAgICAgUUFjdGlvbiogdG9nZ2xl
R3JhcGhpY3NWaWV3ID0gdG9vbHNNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSB1c2Ugb2YgUUdyYXBo
aWNzVmlldyIsIHRoaXMsIFNMT1QoaW5pdGlhbGl6ZVZpZXcoYm9vbCkpKTsKICAgICB0b2dnbGVH
cmFwaGljc1ZpZXctPnNldENoZWNrYWJsZSh0cnVlKTsKICAgICB0b2dnbGVHcmFwaGljc1ZpZXct
PnNldENoZWNrZWQoZmFsc2UpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49277</attachid>
            <date>2010-02-23 04:49:53 -0800</date>
            <delta_ts>2010-02-23 05:13:53 -0800</delta_ts>
            <desc>Qt WebGL support</desc>
            <filename>qt-webgl-support-3.diff</filename>
            <type>text/plain</type>
            <size>75321</size>
            <attacher name="Jarkko Sakkinen">jarkko.sakkinen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9XZWJDb3JlL1dlYkNvcmUucHJpCmlu
ZGV4IDI3ZjFiYjYuLmZjNzlmOGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMjg3LDggKzI4NywxNyBAQCBJRExfQklORElOR1Mg
Kz0gXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaWRsIFwKICAgICBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlk
bCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9X
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5pZGwgXAorICAgIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRsIFwKICAg
ICBodG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJH
TFRleHR1cmUuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwg
XAogICAgIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRsIFwKICAgICBodG1s
L2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaWRsIFwKICAgICBodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkU2hvcnRBcnJheS5pZGwgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBy
byBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYzYyNTIyNC4uOGNjOTYxZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yNjg1
LDYgKzI2ODUsODcgQEAgU09VUkNFUyArPSBcCiB9CiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVO
QUJMRV8zRF9DQU5WQVM9MSkgeworUVQgKz0gb3BlbmdsCitIRUFERVJTICs9IFwKKwliaW5kaW5n
cy9qcy9KU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dl
YkdMQXJyYXlIZWxwZXIuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVj
dG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IuaCBcCisJ
YmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMv
SlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWdu
ZWRJbnRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwlodG1sL2NhbnZhcy9DYW52YXNDb250ZXh0QXR0cmli
dXRlcy5oIFwKKwlodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xBY3RpdmVJbmZvLmggXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXlCdWZmZXIuaCBcCisJaHRt
bC9jYW52YXMvV2ViR0xBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oIFwKKwlo
dG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTENvbnRleHRB
dHRyaWJ1dGVzLmggXAorCWh0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5oIFwKKwlodG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdMR2V0SW5mby5oIFwK
KwlodG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oIFwKKwlodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCBcCisJ
aHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMVGV4dHVy
ZS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIFwKKwlodG1sL2NhbnZh
cy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJ
bnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oIFwKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIAorCitTT1VSQ0VTICs9IFwK
KwliaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRp
bmdzL2pzL0pTV2ViR0xBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRl
QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDdXN0
b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmNwcCBc
CisJYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9q
cy9KU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xJ
bnRBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5j
cHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGlu
Z3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5n
cy9qcy9KU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9K
U1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNX
ZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcCBcCisJaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0
dHJpYnV0ZXMuY3BwIFwKKyAgICBodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuY3BwIFwKKwlodG1s
L2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xBcnJheS5j
cHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xC
eXRlQXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCBc
CisJaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMR2V0SW5mby5jcHAgXAorCWh0bWwv
Y2FudmFzL1dlYkdMSW50QXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3Bw
IFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcCBc
CisJaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xU
ZXh0dXJlLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwIFwKKwlo
dG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xVbnNpZ25lZEludEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0
QXJyYXkuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAg
XAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIFwKKwor
fQorCisKIGluY2x1ZGUoJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9oZWFkZXJzLnByaSkKIGluY2x1
ZGUoLi4vaW5jbHVkZS9RdFdlYktpdC9jbGFzc2hlYWRlcnMucHJpKQogSEVBREVSUyArPSAkJFdF
QktJVF9BUElfSEVBREVSUwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCmluZGV4IDBhNDFkYzYuLmNmMWRmNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTQ0LDYgKzQ0LDEzIEBAIHR5cGVkZWYg
dm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsKIGNvbnN0ICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEID0gMDsKIHR5cGVkZWYgR0x1
aW50IFBsYXRmb3JtM0RPYmplY3Q7CiBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9y
bTNET2JqZWN0ID0gMDsKKyNlbGlmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFF0T3BlbkdML1F0
T3BlbkdMPgorCit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7Citjb25z
dCAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBOdWxsUGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCA9IDA7Cit0eXBlZGVmIGludCBQbGF0Zm9ybTNET2JqZWN0OworY29uc3QgUGxhdGZvcm0zRE9i
amVjdCBOdWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEOwogY29uc3QgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
TnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgPSAwOwpAQCAtNzMsNyArODAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgfTsKIAogICAgIC8vIEZJWE1FOiBpZGVhbGx5IHRoaXMgd291
bGQgYmUgdXNlZCBvbiBhbGwgcGxhdGZvcm1zLgotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2lm
IFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShRVCkKICAgICBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOwogI2VuZGlmCiAKQEAgLTQwOSw2ICs0MTYsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CiAgICAgICAg
IFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7CisjZWxpZiBQTEFURk9S
TShRVCkKKyAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKCk7CisgICAgICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkg
Y29uc3Q7CiAjZWxzZQogICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRDsgfQogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNv
bnN0IHsgcmV0dXJuIE51bGxQbGF0Zm9ybTNET2JqZWN0OyB9CkBAIC03MDQsNyArNzE0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmICAgICAgICAKIAogICAgICAgICAvLyBGSVhNRTog
aWRlYWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRmb3Jtcy4KLSNpZiBQTEFURk9S
TShDSFJPTUlVTSkKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oUVQpCiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOwogICAgICAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbD4gbV9pbnRlcm5hbDsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3MTJkYQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5j
cHAKQEAgLTAsMCArMSwxNzE5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBUaWV0byBD
b3Jwb3JhdGlvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
ICAgIAorICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1
ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJX
ZWJHTEFjdGl2ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJHTEFycmF5LmgiCisjaW5jbHVkZSAiV2Vi
R0xCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTEZsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJH
TEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xJbnRBcnJheS5oIgorI2luY2x1ZGUgIldl
YkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAi
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKKyNpbmNs
dWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Lmgi
CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBkZWZpbmVkIChRVF9PUEVOR0xfRVNfMikgJiYg
IWRlZmluZWQoR0xjaGFyKQordHlwZWRlZiBjaGFyIEdMY2hhcjsKKyNlbmRpZgorCisjaWZuZGVm
IEFQSUVOVFJZCisjZGVmaW5lIEFQSUVOVFJZCisjZW5kaWYKKwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xBY3RpdmVUZXh0dXJlVHlwZSkgKEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbEF0dGFjaFNoYWRlclR5cGUpIChHTHVpbnQsIEdMdWludCk7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZICpnbEJpbmRBdHRyaWJMb2NhdGlvblR5cGUpIChHTHVpbnQsIEdMdWludCwgY29u
c3QgY2hhciAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQmluZEJ1ZmZlclR5cGUpIChH
TGVudW0sIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEJpbmRGcmFtZWJ1ZmZl
clR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgZnJhbWVidWZmZXIpOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSAqZ2xCaW5kUmVuZGVyYnVmZmVyVHlwZSkgKEdMZW51bSB0YXJnZXQsIEdMdWlu
dCByZW5kZXJidWZmZXIpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xCbGVuZENvbG9yVHlw
ZSkgKEdMY2xhbXBmLCBHTGNsYW1wZiwgR0xjbGFtcGYsIEdMY2xhbXBmKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlVHlwZSkoR0xlbnVtIG1vZGVSR0Is
IEdMZW51bSBtb2RlQWxwaGEpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xCbGVuZEZ1bmNT
ZXBhcmF0ZVR5cGUpKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBo
YSwgR0xlbnVtIGRzdEFscGhhKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQnVmZmVyRGF0
YVR5cGUpIChHTGVudW0sIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCAqLCBHTGVudW0pOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xCdWZmZXJTdWJEYXRhVHlwZSkgKEdMZW51bSwgR0xpbnRw
dHIsIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCAqKTsKK3R5cGVkZWYgR0xlbnVtIChBUElFTlRS
WSAqZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzVHlwZSkgKEdMZW51bSB0YXJnZXQpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqZ2xDb21waWxlU2hhZGVyVHlwZSkgKEdMdWludCk7Cit0eXBlZGVm
IEdMdWludCAoQVBJRU5UUlkgKmdsQ3JlYXRlUHJvZ3JhbVR5cGUpICgpOwordHlwZWRlZiBHTHVp
bnQgKEFQSUVOVFJZICpnbENyZWF0ZVNoYWRlclR5cGUpIChHTGVudW0pOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSAqZ2xEZWxldGVCdWZmZXJzVHlwZSkgKEdMc2l6ZWksIGNvbnN0IEdMdWludCAq
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGVsZXRlRnJhbWVidWZmZXJzVHlwZSkgKEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50ICpmcmFtZWJ1ZmZlcnMpOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xEZWxldGVQcm9ncmFtVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlKSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQg
KnJlbmRlcmJ1ZmZlcnMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xEZWxldGVTaGFkZXJU
eXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGV0YWNoU2hhZGVyVHlw
ZSkgKEdMdWludCwgR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZICpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlwZSkgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBHTHVpbnQgcmVuZGVy
YnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRnJhbWVidWZmZXJUZXh0dXJlMkRU
eXBlKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQs
IEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpn
bEdlbkJ1ZmZlcnNUeXBlKSAoR0xzaXplaSwgR0x1aW50ICopOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xHZW5lcmF0ZU1pcG1hcFR5cGUpIChHTGVudW0gdGFyZ2V0KTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsR2VuRnJhbWVidWZmZXJzVHlwZSkgKEdMc2l6ZWkgbiwgR0x1aW50ICpm
cmFtZWJ1ZmZlcnMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZW5SZW5kZXJidWZmZXJz
VHlwZSkgKEdMc2l6ZWkgbiwgR0x1aW50ICpyZW5kZXJidWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkgKmdsR2V0QWN0aXZlQXR0cmliVHlwZSkgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQg
aW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqIGxlbmd0aCwgR0xpbnQgKiBzaXplLCBH
TGVudW0gKiB0eXBlLCBHTGNoYXIgKiBuYW1lKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmds
R2V0QWN0aXZlVW5pZm9ybVR5cGUpIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKiBsZW5ndGgsIEdMaW50ICogc2l6ZSwgR0xlbnVtICogdHlw
ZSwgR0xjaGFyICogbmFtZSk7Cit0eXBlZGVmIEdMaW50IChBUElFTlRSWSAqZ2xHZXRBdHRyaWJM
b2NhdGlvblR5cGUpIChHTHVpbnQsIGNvbnN0IGNoYXIgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbEdldEJ1ZmZlclBhcmFtZXRlcml2VHlwZSkgKEdMZW51bSwgR0xlbnVtLCBHTGludCAq
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXZUeXBlKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBw
bmFtZSwgR0xpbnQgKnBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdldFByb2dy
YW1JbmZvTG9nVHlwZSkgKEdMdWludCwgR0xzaXplaSwgR0xzaXplaSAqLCBjaGFyICopOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRQcm9ncmFtaXZUeXBlKSAoR0x1aW50LCBHTGVudW0s
IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdlR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMp
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRTaGFkZXJJbmZvTG9nVHlwZSkgKEdMdWlu
dCwgR0xzaXplaSwgR0xzaXplaSAqLCBjaGFyICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAq
Z2xHZXRTaGFkZXJpdlR5cGUpIChHTHVpbnQsIEdMZW51bSwgR0xpbnQgKik7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZICpnbEdldFNoYWRlclNvdXJjZVR5cGUpIChHTHVpbnQsIEdMc2l6ZWksIEdM
c2l6ZWkgKiwgY2hhciAqKTsKK3R5cGVkZWYgR0xpbnQgKEFQSUVOVFJZICpnbEdldFVuaWZvcm1M
b2NhdGlvblR5cGUpIChHTHVpbnQsIGNvbnN0IGNoYXIqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsR2V0VW5pZm9ybWZ2VHlwZSkgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwg
R0xmbG9hdCAqIHBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdldFVuaWZvcm1p
dlR5cGUpIChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMaW50ICogcGFyYW1zKTsK
K3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0VmVydGV4QXR0cmliZnZUeXBlKSAoR0x1aW50
IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKiBwYXJhbXMpOwordHlwZWRlZiB2b2lkIChB
UElFTlRSWSAqZ2xHZXRWZXJ0ZXhBdHRyaWJpdlR5cGUpIChHTHVpbnQgaW5kZXgsIEdMZW51bSBw
bmFtZSwgR0xpbnQgKiBwYXJhbXMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRWZXJ0
ZXhBdHRyaWJQb2ludGVydlR5cGUpIChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0x2b2lk
ICoqIHBvaW50ZXIpOwordHlwZWRlZiBHTGJvb2xlYW4gKEFQSUVOVFJZICpnbElzQnVmZmVyVHlw
ZSkgKEdMdWludCBidWZmZXIpOwordHlwZWRlZiBHTGJvb2xlYW4gKEFQSUVOVFJZICpnbElzRnJh
bWVidWZmZXJUeXBlKSAoR0x1aW50IGZyYW1lYnVmZmVyKTsKK3R5cGVkZWYgR0xib29sZWFuIChB
UElFTlRSWSAqZ2xJc1Byb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgR0xib29sZWFuIChB
UElFTlRSWSAqZ2xJc1JlbmRlcmJ1ZmZlclR5cGUpIChHTHVpbnQgcmVuZGVyYnVmZmVyKTsKK3R5
cGVkZWYgR0xib29sZWFuIChBUElFTlRSWSAqZ2xJc1NoYWRlclR5cGUpIChHTHVpbnQpOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xMaW5rUHJvZ3JhbVR5cGUpIChHTHVpbnQpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqZ2xSZW5kZXJidWZmZXJTdG9yYWdlVHlwZSkgKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xTaGFkZXJTb3VyY2VUeXBlKSAoR0x1aW50LCBH
THNpemVpLCBjb25zdCBjaGFyICoqLCBjb25zdCBHTGludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkgKmdsU3RlbmNpbEZ1bmNTZXBhcmF0ZVR5cGUpIChHTGVudW0gZmFjZSwgR0xlbnVtIGZ1
bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xT
dGVuY2lsTWFza1NlcGFyYXRlVHlwZSkgKEdMZW51bSBmYWNlLCBHTHVpbnQgbWFzayk7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZICpnbFN0ZW5jaWxPcFNlcGFyYXRlVHlwZSkgKEdMZW51bSBmYWNl
LCBHTGVudW0gc2ZhaWwsIEdMZW51bSBkcGZhaWwsIEdMZW51bSBkcHBhc3MpOwordHlwZWRlZiB2
b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtMWZUeXBlKSAoR0xpbnQsIEdMZmxvYXQpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtMWZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25z
dCBHTGZsb2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtMWlUeXBlKSAo
R0xpbnQsIEdMaW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTFpdlR5cGUp
IChHTGludCwgR0xzaXplaSwgY29uc3QgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpnbFVuaWZvcm0yZlR5cGUpIChHTGludCwgR0xmbG9hdCwgR0xmbG9hdCk7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZICpnbFVuaWZvcm0yZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNvbnN0IEdM
ZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm0yaVR5cGUpIChHTGlu
dCwgR0xpbnQsIEdMaW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTJpdlR5
cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbFVuaWZvcm0zZlR5cGUpIChHTGludCwgR0xmbG9hdCwgR0xmbG9hdCwgR0xmbG9hdCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm0zZnZUeXBlKSAoR0xpbnQsIEdMc2l6
ZWksIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm0z
aVR5cGUpIChHTGludCwgR0xpbnQsIEdMaW50LCBHTGludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbFVuaWZvcm0zaXZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNvbnN0IEdMaW50ICopOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtNGZUeXBlKSAoR0xpbnQsIEdMZmxvYXQs
IEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xV
bmlmb3JtNGZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0ICopOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtNGlUeXBlKSAoR0xpbnQsIEdMaW50LCBHTGludCwg
R0xpbnQsIEdMaW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTRpdlR5cGUp
IChHTGludCwgR0xzaXplaSwgY29uc3QgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpnbFVuaWZvcm1NYXRyaXgyZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwgY29u
c3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybU1hdHJpeDNm
dlR5cGUpIChHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0ICopOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtTWF0cml4NGZ2VHlwZSkgKEdMaW50LCBHTHNp
emVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpnbFVzZVByb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmds
VmFsaWRhdGVQcm9ncmFtVHlwZSkgKEdMdWludCBwcm9ncmFtKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkgKmdsVmVydGV4QXR0cmliMWZUeXBlKSAoR0x1aW50LCBjb25zdCBHTGZsb2F0KTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliMWZ2VHlwZSkgKEdMdWludCwgY29u
c3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliMmZU
eXBlKSAoR0x1aW50LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliMmZ2VHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9h
dCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliM2ZUeXBlKSAoR0x1
aW50LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0KTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliM2Z2VHlwZSkgKEdMdWludCwgY29uc3Qg
R0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliNGZUeXBl
KSAoR0x1aW50LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0LCBj
b25zdCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliNGZ2
VHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkg
KmdsVmVydGV4QXR0cmliUG9pbnRlclR5cGUpIChHTHVpbnQsIEdMaW50LCBHTGVudW0sIEdMYm9v
bGVhbiwgR0xzaXplaSwgY29uc3QgR0x2b2lkICopOworCitjbGFzcyBHcmFwaGljc0NvbnRleHQz
REludGVybmFsIHsKK3B1YmxpYzoKKworICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpOworICAgIH5HcmFwaGljc0NvbnRleHQz
REludGVybmFsKCk7CisKKyAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiBtX3ZhbGlkOyB9CisK
K3B1YmxpYzoKKworICAgIGdsQWN0aXZlVGV4dHVyZVR5cGUgYWN0aXZlVGV4dHVyZTsKKyAgICBn
bEF0dGFjaFNoYWRlclR5cGUgYXR0YWNoU2hhZGVyOworICAgIGdsQmluZEF0dHJpYkxvY2F0aW9u
VHlwZSBiaW5kQXR0cmliTG9jYXRpb247CisgICAgZ2xCaW5kQnVmZmVyVHlwZSBiaW5kQnVmZmVy
OworICAgIGdsQmluZEZyYW1lYnVmZmVyVHlwZSBiaW5kRnJhbWVidWZmZXI7CisgICAgZ2xCaW5k
UmVuZGVyYnVmZmVyVHlwZSBiaW5kUmVuZGVyYnVmZmVyOworICAgIGdsQmxlbmRDb2xvclR5cGUg
YmxlbmRDb2xvcjsKKyAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZVR5cGUgYmxlbmRFcXVhdGlv
blNlcGFyYXRlOworICAgIGdsQmxlbmRGdW5jU2VwYXJhdGVUeXBlIGJsZW5kRnVuY1NlcGFyYXRl
OworICAgIGdsQnVmZmVyRGF0YVR5cGUgYnVmZmVyRGF0YTsKKyAgICBnbEJ1ZmZlclN1YkRhdGFU
eXBlIGJ1ZmZlclN1YkRhdGE7CisgICAgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzVHlwZSBjaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzOworICAgIGdsQ29tcGlsZVNoYWRlclR5cGUgY29tcGlsZVNoYWRl
cjsKKyAgICBnbENyZWF0ZVByb2dyYW1UeXBlIGNyZWF0ZVByb2dyYW07CisgICAgZ2xDcmVhdGVT
aGFkZXJUeXBlIGNyZWF0ZVNoYWRlcjsKKyAgICBnbERlbGV0ZUJ1ZmZlcnNUeXBlIGRlbGV0ZUJ1
ZmZlcnM7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNUeXBlIGRlbGV0ZUZyYW1lYnVmZmVyczsK
KyAgICBnbERlbGV0ZVByb2dyYW1UeXBlIGRlbGV0ZVByb2dyYW07CisgICAgZ2xEZWxldGVSZW5k
ZXJidWZmZXJzVHlwZSBkZWxldGVSZW5kZXJidWZmZXJzOworICAgIGdsRGVsZXRlU2hhZGVyVHlw
ZSBkZWxldGVTaGFkZXI7CisgICAgZ2xEZXRhY2hTaGFkZXJUeXBlIGRldGFjaFNoYWRlcjsKKyAg
ICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGUgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
OworICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXlUeXBlIGVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5OworICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJUeXBlIGZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRUeXBlIGZyYW1lYnVmZmVyVGV4dHVy
ZTJEOworICAgIGdsR2VuQnVmZmVyc1R5cGUgZ2VuQnVmZmVyczsKKyAgICBnbEdlbmVyYXRlTWlw
bWFwVHlwZSBnZW5lcmF0ZU1pcG1hcDsKKyAgICBnbEdlbkZyYW1lYnVmZmVyc1R5cGUgZ2VuRnJh
bWVidWZmZXJzOworICAgIGdsR2VuUmVuZGVyYnVmZmVyc1R5cGUgZ2VuUmVuZGVyYnVmZmVyczsK
KyAgICBnbEdldEFjdGl2ZUF0dHJpYlR5cGUgZ2V0QWN0aXZlQXR0cmliOworICAgIGdsR2V0QWN0
aXZlVW5pZm9ybVR5cGUgZ2V0QWN0aXZlVW5pZm9ybTsKKyAgICBnbEdldEF0dHJpYkxvY2F0aW9u
VHlwZSBnZXRBdHRyaWJMb2NhdGlvbjsKKyAgICBnbEdldEJ1ZmZlclBhcmFtZXRlcml2VHlwZSBn
ZXRCdWZmZXJQYXJhbWV0ZXJpdjsKKyAgICBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2VHlwZSBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdjsKKyAgICBnbEdl
dFByb2dyYW1JbmZvTG9nVHlwZSBnZXRQcm9ncmFtSW5mb0xvZzsKKyAgICBnbEdldFByb2dyYW1p
dlR5cGUgZ2V0UHJvZ3JhbWl2OworICAgIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZUeXBl
IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2OworICAgIGdsR2V0U2hhZGVySW5mb0xvZ1R5cGUg
Z2V0U2hhZGVySW5mb0xvZzsKKyAgICBnbEdldFNoYWRlcml2VHlwZSBnZXRTaGFkZXJpdjsKKyAg
ICBnbEdldFNoYWRlclNvdXJjZVR5cGUgZ2V0U2hhZGVyU291cmNlOworICAgIGdsR2V0VW5pZm9y
bWZ2VHlwZSBnZXRVbmlmb3JtZnY7CisgICAgZ2xHZXRVbmlmb3JtaXZUeXBlIGdldFVuaWZvcm1p
djsKKyAgICBnbEdldFVuaWZvcm1Mb2NhdGlvblR5cGUgZ2V0VW5pZm9ybUxvY2F0aW9uOworICAg
IGdsR2V0VmVydGV4QXR0cmliZnZUeXBlIGdldFZlcnRleEF0dHJpYmZ2OworICAgIGdsR2V0VmVy
dGV4QXR0cmliaXZUeXBlIGdldFZlcnRleEF0dHJpYml2OworICAgIGdsR2V0VmVydGV4QXR0cmli
UG9pbnRlcnZUeXBlIGdldFZlcnRleEF0dHJpYlBvaW50ZXJ2OworICAgIGdsSXNCdWZmZXJUeXBl
IGlzQnVmZmVyOworICAgIGdsSXNGcmFtZWJ1ZmZlclR5cGUgaXNGcmFtZWJ1ZmZlcjsKKyAgICBn
bElzUHJvZ3JhbVR5cGUgaXNQcm9ncmFtOworICAgIGdsSXNSZW5kZXJidWZmZXJUeXBlIGlzUmVu
ZGVyYnVmZmVyOworICAgIGdsSXNTaGFkZXJUeXBlIGlzU2hhZGVyOworICAgIGdsTGlua1Byb2dy
YW1UeXBlIGxpbmtQcm9ncmFtOworICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZVR5cGUgcmVuZGVy
YnVmZmVyU3RvcmFnZTsKKyAgICBnbFNoYWRlclNvdXJjZVR5cGUgc2hhZGVyU291cmNlOworICAg
IGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZVR5cGUgc3RlbmNpbEZ1bmNTZXBhcmF0ZTsKKyAgICBnbFN0
ZW5jaWxNYXNrU2VwYXJhdGVUeXBlIHN0ZW5jaWxNYXNrU2VwYXJhdGU7CisgICAgZ2xTdGVuY2ls
T3BTZXBhcmF0ZVR5cGUgc3RlbmNpbE9wU2VwYXJhdGU7CisgICAgZ2xVbmlmb3JtMWZUeXBlIHVu
aWZvcm0xZjsKKyAgICBnbFVuaWZvcm0xZnZUeXBlIHVuaWZvcm0xZnY7CisgICAgZ2xVbmlmb3Jt
MWlUeXBlIHVuaWZvcm0xaTsKKyAgICBnbFVuaWZvcm0xaXZUeXBlIHVuaWZvcm0xaXY7CisgICAg
Z2xVbmlmb3JtMmZUeXBlIHVuaWZvcm0yZjsKKyAgICBnbFVuaWZvcm0yZnZUeXBlIHVuaWZvcm0y
ZnY7CisgICAgZ2xVbmlmb3JtMmlUeXBlIHVuaWZvcm0yaTsKKyAgICBnbFVuaWZvcm0yaXZUeXBl
IHVuaWZvcm0yaXY7CisgICAgZ2xVbmlmb3JtM2ZUeXBlIHVuaWZvcm0zZjsKKyAgICBnbFVuaWZv
cm0zZnZUeXBlIHVuaWZvcm0zZnY7CisgICAgZ2xVbmlmb3JtM2lUeXBlIHVuaWZvcm0zaTsKKyAg
ICBnbFVuaWZvcm0zaXZUeXBlIHVuaWZvcm0zaXY7CisgICAgZ2xVbmlmb3JtNGZUeXBlIHVuaWZv
cm00ZjsKKyAgICBnbFVuaWZvcm00ZnZUeXBlIHVuaWZvcm00ZnY7CisgICAgZ2xVbmlmb3JtNGlU
eXBlIHVuaWZvcm00aTsKKyAgICBnbFVuaWZvcm00aXZUeXBlIHVuaWZvcm00aXY7CisgICAgZ2xV
bmlmb3JtTWF0cml4MmZ2VHlwZSB1bmlmb3JtTWF0cml4MmZ2OworICAgIGdsVW5pZm9ybU1hdHJp
eDNmdlR5cGUgdW5pZm9ybU1hdHJpeDNmdjsKKyAgICBnbFVuaWZvcm1NYXRyaXg0ZnZUeXBlIHVu
aWZvcm1NYXRyaXg0ZnY7CisgICAgZ2xVc2VQcm9ncmFtVHlwZSB1c2VQcm9ncmFtOworICAgIGds
VmFsaWRhdGVQcm9ncmFtVHlwZSB2YWxpZGF0ZVByb2dyYW07CisgICAgZ2xWZXJ0ZXhBdHRyaWIx
ZlR5cGUgdmVydGV4QXR0cmliMWY7CisgICAgZ2xWZXJ0ZXhBdHRyaWIxZnZUeXBlIHZlcnRleEF0
dHJpYjFmdjsKKyAgICBnbFZlcnRleEF0dHJpYjJmVHlwZSB2ZXJ0ZXhBdHRyaWIyZjsKKyAgICBn
bFZlcnRleEF0dHJpYjJmdlR5cGUgdmVydGV4QXR0cmliMmZ2OworICAgIGdsVmVydGV4QXR0cmli
M2ZUeXBlIHZlcnRleEF0dHJpYjNmOworICAgIGdsVmVydGV4QXR0cmliM2Z2VHlwZSB2ZXJ0ZXhB
dHRyaWIzZnY7CisgICAgZ2xWZXJ0ZXhBdHRyaWI0ZlR5cGUgdmVydGV4QXR0cmliNGY7CisgICAg
Z2xWZXJ0ZXhBdHRyaWI0ZnZUeXBlIHZlcnRleEF0dHJpYjRmdjsKKyAgICBnbFZlcnRleEF0dHJp
YlBvaW50ZXJUeXBlIHZlcnRleEF0dHJpYlBvaW50ZXI7CisKK3B1YmxpYzoKKworICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cnM7CisgICAgUUdMV2lkZ2V0KiBtX2dsV2lk
Z2V0OworICAgIEdMdWludCBtX3RleHR1cmU7CisgICAgR0x1aW50IG1fbWFpbkZibzsKKyAgICBH
THVpbnQgbV9jdXJyZW50RmJvOworICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOworICAgIFFJbWFn
ZSBtX3BpeGVsczsKKyAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBtX3N5bnRoZXRpY0Vy
cm9yczsKKworcHJpdmF0ZToKKworICAgIHZvaWQqIGdldFByb2NBZGRyZXNzKGNvbnN0IFFHTENv
bnRleHQqIGN0eCwgY29uc3QgUVN0cmluZyYgcHJvYyk7CisKK3ByaXZhdGU6CisKKyAgICBib29s
IG1fdmFsaWQ7Cit9OworCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRl
eHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQorICAgIDog
bV9hdHRycyhhdHRycykKKyAgICAsIG1fZ2xXaWRnZXQoMCkKKyAgICAsIG1fdGV4dHVyZSgwKQor
ICAgICwgbV9tYWluRmJvKDApCisgICAgLCBtX2N1cnJlbnRGYm8oMCkKKyAgICAsIG1fZGVwdGhC
dWZmZXIoMCkKKyAgICAsIG1fdmFsaWQodHJ1ZSkKK3sKKyAgICBtX2F0dHJzLmFscGhhID0gdHJ1
ZTsKKyAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxz
ZTsKKyAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIG1fYXR0cnMucHJlbXVsdGlw
bGllZEFscGhhID0gdHJ1ZTsKKworICAgIFFHTEZvcm1hdCBmb3JtYXQ7CisKKyAgICBmb3JtYXQu
c2V0RGVwdGgodHJ1ZSk7CisgICAgZm9ybWF0LnNldFNhbXBsZUJ1ZmZlcnModHJ1ZSk7CisgICAg
Zm9ybWF0LnNldFN0ZW5jaWwoZmFsc2UpOworCisgICAgbV9nbFdpZGdldCA9IG5ldyBRR0xXaWRn
ZXQoZm9ybWF0KTsKKyAgICBpZiAoIW1fZ2xXaWRnZXQtPmlzVmFsaWQoKSkgeworICAgICAgICBx
V2FybmluZygiR3JhcGhpY3NDb250ZXh0M0Q6IFFHTFdpZGdldCBkb2VzIG5vdCBoYXZlIGEgdmFs
aWQgY29udGV4dCIpOworICAgICAgICBtX3ZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgY29uc3QgUUdM
Q29udGV4dCogY3R4ID0gbV9nbFdpZGdldC0+Y29udGV4dCgpOworCisjaWYgIWRlZmluZWQgKFFU
X09QRU5HTF9FU18yKSAKKyAgICBhY3RpdmVUZXh0dXJlID0gcmVpbnRlcnByZXRfY2FzdDxnbEFj
dGl2ZVRleHR1cmVUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEFjdGl2ZVRleHR1cmUiKSk7
CisgICAgYXR0YWNoU2hhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbEF0dGFjaFNoYWRlclR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQXR0YWNoU2hhZGVyIikpOworICAgIGJpbmRBdHRyaWJM
b2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCaW5kQXR0cmliTG9jYXRpb25UeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbEJpbmRBdHRyaWJMb2NhdGlvbiIpKTsKKyAgICBiaW5kQnVmZmVy
ID0gcmVpbnRlcnByZXRfY2FzdDxnbEJpbmRCdWZmZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgs
ICJnbEJpbmRCdWZmZXIiKSk7CisgICAgYmluZEZyYW1lYnVmZmVyID0gcmVpbnRlcnByZXRfY2Fz
dDxnbEJpbmRGcmFtZWJ1ZmZlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQmluZEZyYW1l
YnVmZmVyIikpOworICAgIGJpbmRSZW5kZXJidWZmZXIgPSByZWludGVycHJldF9jYXN0PGdsQmlu
ZFJlbmRlcmJ1ZmZlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQmluZFJlbmRlcmJ1ZmZl
ciIpKTsKKyAgICBibGVuZENvbG9yID0gcmVpbnRlcnByZXRfY2FzdDxnbEJsZW5kQ29sb3JUeXBl
PihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJsZW5kQ29sb3IiKSk7CisgICAgYmxlbmRFcXVhdGlv
blNlcGFyYXRlID0gcmVpbnRlcnByZXRfY2FzdDxnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZVR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQmxlbmRFcXVhdGlvblNlcGFyYXRlIikpOworICAgIGJs
ZW5kRnVuY1NlcGFyYXRlID0gcmVpbnRlcnByZXRfY2FzdDxnbEJsZW5kRnVuY1NlcGFyYXRlVHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCbGVuZEZ1bmNTZXBhcmF0ZSIpKTsKKyAgICBidWZm
ZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxnbEJ1ZmZlckRhdGFUeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbEJ1ZmZlckRhdGEiKSk7CisgICAgYnVmZmVyU3ViRGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xCdWZmZXJTdWJEYXRhVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCdWZmZXJT
dWJEYXRhIikpOworICAgIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMgPSByZWludGVycHJldF9jYXN0
PGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyIpKTsKKyAgICBjb21waWxlU2hhZGVyID0gcmVpbnRlcnByZXRf
Y2FzdDxnbENvbXBpbGVTaGFkZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbENvbXBpbGVT
aGFkZXIiKSk7CisgICAgY3JlYXRlUHJvZ3JhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xDcmVhdGVQ
cm9ncmFtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xDcmVhdGVQcm9ncmFtIikpOworICAg
IGNyZWF0ZVNoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xDcmVhdGVTaGFkZXJUeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbENyZWF0ZVNoYWRlciIpKTsKKyAgICBkZWxldGVCdWZmZXJzID0g
cmVpbnRlcnByZXRfY2FzdDxnbERlbGV0ZUJ1ZmZlcnNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgs
ICJnbERlbGV0ZUJ1ZmZlcnMiKSk7CisgICAgZGVsZXRlRnJhbWVidWZmZXJzID0gcmVpbnRlcnBy
ZXRfY2FzdDxnbERlbGV0ZUZyYW1lYnVmZmVyc1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
RGVsZXRlRnJhbWVidWZmZXJzIikpOworICAgIGRlbGV0ZVByb2dyYW0gPSByZWludGVycHJldF9j
YXN0PGdsRGVsZXRlUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsRGVsZXRlUHJv
Z3JhbSIpKTsKKyAgICBkZWxldGVSZW5kZXJidWZmZXJzID0gcmVpbnRlcnByZXRfY2FzdDxnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnMiKSk7CisgICAgZGVsZXRlU2hhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbERlbGV0
ZVNoYWRlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsRGVsZXRlU2hhZGVyIikpOworICAg
IGRldGFjaFNoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZXRhY2hTaGFkZXJUeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbERldGFjaFNoYWRlciIpKTsKKyAgICBkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkgPSByZWludGVycHJldF9jYXN0PGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5VHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiKSk7Cisg
ICAgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkgPSByZWludGVycHJldF9jYXN0PGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXlUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5IikpOworICAgIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyID0gcmVpbnRlcnByZXRf
Y2FzdDxnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAi
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIpKTsKKyAgICBmcmFtZWJ1ZmZlclRleHR1cmUyRCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRFR5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsRnJhbWVidWZmZXJUZXh0dXJlMkQiKSk7CisgICAgZ2VuQnVmZmVycyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xHZW5CdWZmZXJzVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xH
ZW5CdWZmZXJzIikpOworICAgIGdlbmVyYXRlTWlwbWFwID0gcmVpbnRlcnByZXRfY2FzdDxnbEdl
bmVyYXRlTWlwbWFwVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZW5lcmF0ZU1pcG1hcCIp
KTsKKyAgICBnZW5GcmFtZWJ1ZmZlcnMgPSByZWludGVycHJldF9jYXN0PGdsR2VuRnJhbWVidWZm
ZXJzVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZW5GcmFtZWJ1ZmZlcnMiKSk7CisgICAg
Z2VuUmVuZGVyYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZW5SZW5kZXJidWZmZXJzVHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZW5SZW5kZXJidWZmZXJzIikpOworICAgIGdldEFj
dGl2ZUF0dHJpYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRBY3RpdmVBdHRyaWJUeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbEdldEFjdGl2ZUF0dHJpYiIpKTsKKyAgICBnZXRBY3RpdmVVbmlm
b3JtID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldEFjdGl2ZVVuaWZvcm1UeXBlPihnZXRQcm9jQWRk
cmVzcyhjdHgsICJnbEdldEFjdGl2ZVVuaWZvcm0iKSk7CisgICAgZ2V0QXR0cmliTG9jYXRpb24g
PSByZWludGVycHJldF9jYXN0PGdsR2V0QXR0cmliTG9jYXRpb25UeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbEdldEF0dHJpYkxvY2F0aW9uIikpOworICAgIGdldEJ1ZmZlclBhcmFtZXRlcml2
ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldEJ1ZmZlclBhcmFtZXRlcml2VHlwZT4oZ2V0UHJvY0Fk
ZHJlc3MoY3R4LCAiZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdiIpKTsKKyAgICBnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYiKSk7CisgICAgZ2V0UHJvZ3JhbUluZm9Mb2cg
PSByZWludGVycHJldF9jYXN0PGdsR2V0UHJvZ3JhbUluZm9Mb2dUeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbEdldFByb2dyYW1JbmZvTG9nIikpOworICAgIGdldFByb2dyYW1pdiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xHZXRQcm9ncmFtaXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdl
dFByb2dyYW1pdiIpKTsKKyAgICBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYiKSk7CisgICAgZ2V0U2hhZGVySW5m
b0xvZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRTaGFkZXJJbmZvTG9nVHlwZT4oZ2V0UHJvY0Fk
ZHJlc3MoY3R4LCAiZ2xHZXRTaGFkZXJJbmZvTG9nIikpOworICAgIGdldFNoYWRlcml2ID0gcmVp
bnRlcnByZXRfY2FzdDxnbEdldFNoYWRlcml2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xH
ZXRTaGFkZXJpdiIpKTsKKyAgICBnZXRTaGFkZXJTb3VyY2UgPSByZWludGVycHJldF9jYXN0PGds
R2V0U2hhZGVyU291cmNlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRTaGFkZXJTb3Vy
Y2UiKSk7CisgICAgZ2V0VW5pZm9ybWZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFVuaWZvcm1m
dlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0VW5pZm9ybWZ2IikpOworICAgIGdldFVu
aWZvcm1pdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRVbmlmb3JtaXZUeXBlPihnZXRQcm9jQWRk
cmVzcyhjdHgsICJnbEdldFVuaWZvcm1pdiIpKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24gPSBy
ZWludGVycHJldF9jYXN0PGdsR2V0VW5pZm9ybUxvY2F0aW9uVHlwZT4oZ2V0UHJvY0FkZHJlc3Mo
Y3R4LCAiZ2xHZXRVbmlmb3JtTG9jYXRpb24iKSk7CisgICAgZ2V0VmVydGV4QXR0cmliZnYgPSBy
ZWludGVycHJldF9jYXN0PGdsR2V0VmVydGV4QXR0cmliZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhj
dHgsICJnbEdldFZlcnRleEF0dHJpYmZ2IikpOworICAgIGdldFZlcnRleEF0dHJpYml2ID0gcmVp
bnRlcnByZXRfY2FzdDxnbEdldFZlcnRleEF0dHJpYml2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xHZXRWZXJ0ZXhBdHRyaWJpdiIpKTsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJQb2ludGVydiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydlR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYiKSk7CisgICAgaXNCdWZmZXIg
PSByZWludGVycHJldF9jYXN0PGdsSXNCdWZmZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJn
bElzQnVmZmVyIikpOworICAgIGlzRnJhbWVidWZmZXIgPSByZWludGVycHJldF9jYXN0PGdsSXNG
cmFtZWJ1ZmZlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsSXNGcmFtZWJ1ZmZlciIpKTsK
KyAgICBpc1Byb2dyYW0gPSByZWludGVycHJldF9jYXN0PGdsSXNQcm9ncmFtVHlwZT4oZ2V0UHJv
Y0FkZHJlc3MoY3R4LCAiZ2xJc1Byb2dyYW0iKSk7CisgICAgaXNSZW5kZXJidWZmZXIgPSByZWlu
dGVycHJldF9jYXN0PGdsSXNSZW5kZXJidWZmZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJn
bElzUmVuZGVyYnVmZmVyIikpOworICAgIGlzU2hhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbElz
U2hhZGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xJc1NoYWRlciIpKTsKKyAgICBsaW5r
UHJvZ3JhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xMaW5rUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsTGlua1Byb2dyYW0iKSk7CisgICAgcmVuZGVyYnVmZmVyU3RvcmFnZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xSZW5kZXJidWZmZXJTdG9yYWdlVHlwZT4oZ2V0UHJvY0FkZHJlc3Mo
Y3R4LCAiZ2xSZW5kZXJidWZmZXJTdG9yYWdlIikpOworICAgIHNoYWRlclNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xTaGFkZXJTb3VyY2VUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFNo
YWRlclNvdXJjZSIpKTsKKyAgICBzdGVuY2lsRnVuY1NlcGFyYXRlID0gcmVpbnRlcnByZXRfY2Fz
dDxnbFN0ZW5jaWxGdW5jU2VwYXJhdGVUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFN0ZW5j
aWxGdW5jU2VwYXJhdGUiKSk7CisgICAgc3RlbmNpbE1hc2tTZXBhcmF0ZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xTdGVuY2lsTWFza1NlcGFyYXRlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xT
dGVuY2lsTWFza1NlcGFyYXRlIikpOworICAgIHN0ZW5jaWxPcFNlcGFyYXRlID0gcmVpbnRlcnBy
ZXRfY2FzdDxnbFN0ZW5jaWxPcFNlcGFyYXRlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xT
dGVuY2lsT3BTZXBhcmF0ZSIpKTsKKyAgICB1bmlmb3JtMWYgPSByZWludGVycHJldF9jYXN0PGds
VW5pZm9ybTFmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMWYiKSk7CisgICAg
dW5pZm9ybTFmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtMWZ2VHlwZT4oZ2V0UHJvY0Fk
ZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMWZ2IikpOworICAgIHVuaWZvcm0xaSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xVbmlmb3JtMWlUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0xaSIp
KTsKKyAgICB1bmlmb3JtMWl2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0xaXZUeXBlPihn
ZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0xaXYiKSk7CisgICAgdW5pZm9ybTJmID0gcmVp
bnRlcnByZXRfY2FzdDxnbFVuaWZvcm0yZlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5p
Zm9ybTJmIikpOworICAgIHVuaWZvcm0yZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTJm
dlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTJmdiIpKTsKKyAgICB1bmlmb3Jt
MmkgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTJpVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xVbmlmb3JtMmkiKSk7CisgICAgdW5pZm9ybTJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xV
bmlmb3JtMml2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMml2IikpOworICAg
IHVuaWZvcm0zZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtM2ZUeXBlPihnZXRQcm9jQWRk
cmVzcyhjdHgsICJnbFVuaWZvcm0zZiIpKTsKKyAgICB1bmlmb3JtM2Z2ID0gcmVpbnRlcnByZXRf
Y2FzdDxnbFVuaWZvcm0zZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0zZnYi
KSk7CisgICAgdW5pZm9ybTNpID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0zaVR5cGU+KGdl
dFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTNpIikpOworICAgIHVuaWZvcm0zaXYgPSByZWlu
dGVycHJldF9jYXN0PGdsVW5pZm9ybTNpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5p
Zm9ybTNpdiIpKTsKKyAgICB1bmlmb3JtNGYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTRm
VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtNGYiKSk7CisgICAgdW5pZm9ybTRm
diA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtNGZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xVbmlmb3JtNGZ2IikpOworICAgIHVuaWZvcm00aSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xV
bmlmb3JtNGlUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm00aSIpKTsKKyAgICB1
bmlmb3JtNGl2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm00aXZUeXBlPihnZXRQcm9jQWRk
cmVzcyhjdHgsICJnbFVuaWZvcm00aXYiKSk7CisgICAgdW5pZm9ybU1hdHJpeDJmdiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtTWF0cml4MmZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAi
Z2xVbmlmb3JtTWF0cml4MmZ2IikpOworICAgIHVuaWZvcm1NYXRyaXgzZnYgPSByZWludGVycHJl
dF9jYXN0PGdsVW5pZm9ybU1hdHJpeDNmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5p
Zm9ybU1hdHJpeDNmdiIpKTsKKyAgICB1bmlmb3JtTWF0cml4NGZ2ID0gcmVpbnRlcnByZXRfY2Fz
dDxnbFVuaWZvcm1NYXRyaXg0ZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm1N
YXRyaXg0ZnYiKSk7CisgICAgdXNlUHJvZ3JhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVc2VQcm9n
cmFtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVc2VQcm9ncmFtIikpOworICAgIHZhbGlk
YXRlUHJvZ3JhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWYWxpZGF0ZVByb2dyYW1UeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbFZhbGlkYXRlUHJvZ3JhbSIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWIx
ZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRyaWIxZlR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsVmVydGV4QXR0cmliMWYiKSk7CisgICAgdmVydGV4QXR0cmliMWZ2ID0gcmVpbnRl
cnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjFmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
VmVydGV4QXR0cmliMWZ2IikpOworICAgIHZlcnRleEF0dHJpYjJmID0gcmVpbnRlcnByZXRfY2Fz
dDxnbFZlcnRleEF0dHJpYjJmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xWZXJ0ZXhBdHRy
aWIyZiIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWIyZnYgPSByZWludGVycHJldF9jYXN0PGdsVmVydGV4
QXR0cmliMmZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xWZXJ0ZXhBdHRyaWIyZnYiKSk7
CisgICAgdmVydGV4QXR0cmliM2YgPSByZWludGVycHJldF9jYXN0PGdsVmVydGV4QXR0cmliM2ZU
eXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjNmIikpOworICAgIHZlcnRl
eEF0dHJpYjNmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRyaWIzZnZUeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjNmdiIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWI0
ZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRyaWI0ZlR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsVmVydGV4QXR0cmliNGYiKSk7CisgICAgdmVydGV4QXR0cmliNGZ2ID0gcmVpbnRl
cnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjRmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
VmVydGV4QXR0cmliNGZ2IikpOworICAgIHZlcnRleEF0dHJpYlBvaW50ZXIgPSByZWludGVycHJl
dF9jYXN0PGdsVmVydGV4QXR0cmliUG9pbnRlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
VmVydGV4QXR0cmliUG9pbnRlciIpKTsKKyNlbHNlCisgICAgYWN0aXZlVGV4dHVyZSA9IGdsQWN0
aXZlVGV4dHVyZTsKKyAgICBhdHRhY2hTaGFkZXIgPSBnbEF0dGFjaFNoYWRlcjsKKyAgICBiaW5k
QXR0cmliTG9jYXRpb24gPSBnbEJpbmRBdHRyaWJMb2NhdGlvbjsKKyAgICBiaW5kQnVmZmVyID0g
Z2xCaW5kQnVmZmVyOworICAgIGJpbmRGcmFtZWJ1ZmZlciA9IGdsQmluZEZyYW1lYnVmZmVyOwor
ICAgIGJpbmRSZW5kZXJidWZmZXIgPSBnbEJpbmRSZW5kZXJidWZmZXI7CisgICAgYmxlbmRDb2xv
ciA9IGdsQmxlbmRDb2xvcjsKKyAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUgPSBnbEJsZW5kRXF1
YXRpb25TZXBhcmF0ZTsKKyAgICBibGVuZEZ1bmNTZXBhcmF0ZSA9IGdsQmxlbmRGdW5jU2VwYXJh
dGU7CisgICAgYnVmZmVyRGF0YSA9IGdsQnVmZmVyRGF0YTsKKyAgICBidWZmZXJTdWJEYXRhID0g
Z2xCdWZmZXJTdWJEYXRhOworICAgIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMgPSBnbENoZWNrRnJh
bWVidWZmZXJTdGF0dXM7CisgICAgY29tcGlsZVNoYWRlciA9IGdsQ29tcGlsZVNoYWRlcjsKKyAg
ICBjcmVhdGVQcm9ncmFtID0gZ2xDcmVhdGVQcm9ncmFtOworICAgIGNyZWF0ZVNoYWRlciA9IGds
Q3JlYXRlU2hhZGVyOworICAgIGRlbGV0ZUJ1ZmZlcnMgPSBnbERlbGV0ZUJ1ZmZlcnM7CisgICAg
ZGVsZXRlRnJhbWVidWZmZXJzID0gZ2xEZWxldGVGcmFtZWJ1ZmZlcnM7CisgICAgZGVsZXRlUHJv
Z3JhbSA9IGdsRGVsZXRlUHJvZ3JhbTsKKyAgICBkZWxldGVSZW5kZXJidWZmZXJzID0gZ2xEZWxl
dGVSZW5kZXJidWZmZXJzOworICAgIGRlbGV0ZVNoYWRlciA9IGdsRGVsZXRlU2hhZGVyOworICAg
IGRldGFjaFNoYWRlciA9IGdsRGV0YWNoU2hhZGVyOworICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheSA9IGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5OworICAgIGVuYWJsZVZlcnRleEF0dHJp
YkFycmF5ID0gZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciA9IGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXI7CisgICAgZnJhbWVidWZmZXJUZXh0
dXJlMkQgPSBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEOworICAgIGdlbkJ1ZmZlcnMgPSBnbEdlbkJ1
ZmZlcnM7CisgICAgZ2VuZXJhdGVNaXBtYXAgPSBnbEdlbmVyYXRlTWlwbWFwOworICAgIGdlbkZy
YW1lYnVmZmVycyA9IGdsR2VuRnJhbWVidWZmZXJzOworICAgIGdlblJlbmRlcmJ1ZmZlcnMgPSBn
bEdlblJlbmRlcmJ1ZmZlcnM7CisgICAgZ2V0QWN0aXZlQXR0cmliID0gZ2xHZXRBY3RpdmVBdHRy
aWI7CisgICAgZ2V0QWN0aXZlVW5pZm9ybSA9IGdsR2V0QWN0aXZlVW5pZm9ybTsKKyAgICBnZXRB
dHRyaWJMb2NhdGlvbiA9IGdsR2V0QXR0cmliTG9jYXRpb247CisgICAgZ2V0QnVmZmVyUGFyYW1l
dGVyaXYgPSBnbEdldEJ1ZmZlclBhcmFtZXRlcml2OworICAgIGdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2ID0gZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdjsK
KyAgICBnZXRQcm9ncmFtSW5mb0xvZyA9IGdsR2V0UHJvZ3JhbUluZm9Mb2c7CisgICAgZ2V0UHJv
Z3JhbWl2ID0gZ2xHZXRQcm9ncmFtaXY7CisgICAgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYg
PSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2OworICAgIGdldFNoYWRlckluZm9Mb2cgPSBn
bEdldFNoYWRlckluZm9Mb2c7CisgICAgZ2V0U2hhZGVyaXYgPSBnbEdldFNoYWRlcml2OworICAg
IGdldFNoYWRlclNvdXJjZSA9IGdsR2V0U2hhZGVyU291cmNlOworICAgIGdldFVuaWZvcm1mdiA9
IGdsR2V0VW5pZm9ybWZ2OworICAgIGdldFVuaWZvcm1pdiA9IGdsR2V0VW5pZm9ybWl2OworICAg
IGdldFVuaWZvcm1Mb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uOworICAgIGdldFZlcnRl
eEF0dHJpYmZ2ID0gZ2xHZXRWZXJ0ZXhBdHRyaWJmdjsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJpdiA9
IGdsR2V0VmVydGV4QXR0cmliaXY7CisgICAgZ2V0VmVydGV4QXR0cmliUG9pbnRlcnYgPSBnbEdl
dFZlcnRleEF0dHJpYlBvaW50ZXJ2OworICAgIGlzQnVmZmVyID0gZ2xJc0J1ZmZlcjsKKyAgICBp
c0ZyYW1lYnVmZmVyID0gZ2xJc0ZyYW1lYnVmZmVyOworICAgIGlzUHJvZ3JhbSA9IGdsSXNQcm9n
cmFtOworICAgIGlzUmVuZGVyYnVmZmVyID0gZ2xJc1JlbmRlcmJ1ZmZlcjsKKyAgICBpc1NoYWRl
ciA9IGdsSXNTaGFkZXI7CisgICAgbGlua1Byb2dyYW0gPSBnbExpbmtQcm9ncmFtOworICAgIHJl
bmRlcmJ1ZmZlclN0b3JhZ2UgPSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2U7CisgICAgc2hhZGVyU291
cmNlID0gZ2xTaGFkZXJTb3VyY2U7CisgICAgc3RlbmNpbEZ1bmNTZXBhcmF0ZSA9IGdsU3RlbmNp
bEZ1bmNTZXBhcmF0ZTsKKyAgICBzdGVuY2lsTWFza1NlcGFyYXRlID0gZ2xTdGVuY2lsTWFza1Nl
cGFyYXRlOworICAgIHN0ZW5jaWxPcFNlcGFyYXRlID0gZ2xTdGVuY2lsT3BTZXBhcmF0ZTsKKyAg
ICB1bmlmb3JtMWYgPSBnbFVuaWZvcm0xZjsKKyAgICB1bmlmb3JtMWZ2ID0gZ2xVbmlmb3JtMWZ2
OworICAgIHVuaWZvcm0xaSA9IGdsVW5pZm9ybTFpOworICAgIHVuaWZvcm0xaXYgPSBnbFVuaWZv
cm0xaXY7CisgICAgdW5pZm9ybTJmID0gZ2xVbmlmb3JtMmY7CisgICAgdW5pZm9ybTJmdiA9IGds
VW5pZm9ybTJmdjsKKyAgICB1bmlmb3JtMmkgPSBnbFVuaWZvcm0yaTsKKyAgICB1bmlmb3JtMml2
ID0gZ2xVbmlmb3JtMml2OworICAgIHVuaWZvcm0zZiA9IGdsVW5pZm9ybTNmOworICAgIHVuaWZv
cm0zZnYgPSBnbFVuaWZvcm0zZnY7CisgICAgdW5pZm9ybTNpID0gZ2xVbmlmb3JtM2k7CisgICAg
dW5pZm9ybTNpdiA9IGdsVW5pZm9ybTNpdjsKKyAgICB1bmlmb3JtNGYgPSBnbFVuaWZvcm00ZjsK
KyAgICB1bmlmb3JtNGZ2ID0gZ2xVbmlmb3JtNGZ2OworICAgIHVuaWZvcm00aSA9IGdsVW5pZm9y
bTRpOworICAgIHVuaWZvcm00aXYgPSBnbFVuaWZvcm00aXY7CisgICAgdW5pZm9ybU1hdHJpeDJm
diA9IGdsVW5pZm9ybU1hdHJpeDJmdjsKKyAgICB1bmlmb3JtTWF0cml4M2Z2ID0gZ2xVbmlmb3Jt
TWF0cml4M2Z2OworICAgIHVuaWZvcm1NYXRyaXg0ZnYgPSBnbFVuaWZvcm1NYXRyaXg0ZnY7Cisg
ICAgdXNlUHJvZ3JhbSA9IGdsVXNlUHJvZ3JhbTsKKyAgICB2YWxpZGF0ZVByb2dyYW0gPSBnbFZh
bGlkYXRlUHJvZ3JhbTsKKyAgICB2ZXJ0ZXhBdHRyaWIxZiA9IGdsVmVydGV4QXR0cmliMWY7Cisg
ICAgdmVydGV4QXR0cmliMWZ2ID0gZ2xWZXJ0ZXhBdHRyaWIxZnY7CisgICAgdmVydGV4QXR0cmli
MmYgPSBnbFZlcnRleEF0dHJpYjJmOworICAgIHZlcnRleEF0dHJpYjJmdiA9IGdsVmVydGV4QXR0
cmliMmZ2OworICAgIHZlcnRleEF0dHJpYjNmID0gZ2xWZXJ0ZXhBdHRyaWIzZjsKKyAgICB2ZXJ0
ZXhBdHRyaWIzZnYgPSBnbFZlcnRleEF0dHJpYjNmdjsKKyAgICB2ZXJ0ZXhBdHRyaWI0ZiA9IGds
VmVydGV4QXR0cmliNGY7CisgICAgdmVydGV4QXR0cmliNGZ2ID0gZ2xWZXJ0ZXhBdHRyaWI0ZnY7
CisgICAgdmVydGV4QXR0cmliUG9pbnRlciA9IGdsVmVydGV4QXR0cmliUG9pbnRlcjsKKyNlbmRp
ZgorCisgICAgaWYgKCFtX3ZhbGlkKSB7CisgICAgICAgIHFXYXJuaW5nKCJHcmFwaGljc0NvbnRl
eHQzRDogQWxsIG5lZWRlZCBPcGVuR0wgZXh0ZW5zaW9ucyBhcmUgbm90IGF2YWlsYWJsZSIpOwor
ICAgICAgICBtX3ZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBn
bEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19F
REdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LCBHTF9SR0JBLCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworCisgICAgZ2VuRnJhbWVidWZmZXJzKDEs
ICZtX21haW5GYm8pOworICAgIG1fY3VycmVudEZibyA9IG1fbWFpbkZibzsKKworICAgIGJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbWFpbkZibyk7CisK
KyAgICBnZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICBiaW5kUmVuZGVy
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwor
I2lmZGVmIEdMX0RFUFRIX0NPTVBPTkVOVDI0CisgICAgcmVuZGVyYnVmZmVyU3RvcmFnZShHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9ERVBUSF9DT01QT05FTlQyNCwgMSwgMSk7
CisjZWxzZQorICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIDEsIDEpOworI2VuZGlmCisKKyAgICBiaW5k
UmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworIAorICAg
IGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1
cmUsIDApOworICAgIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAgIGdsQ2xlYXJDb2xv
cigwLCAwLCAwLCAwKTsKKworICAgIGlmIChjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4dDNEOiBJ
bnZhbGlkIEZCTyIgPDwgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIpOworICAgICAgICBtX3ZhbGlkID0gZmFsc2U7CisgICAgfQorfQorCitHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpCit7Cisg
ICAgZGVsZXRlIG1fZ2xXaWRnZXQ7CisgICAgbV9nbFdpZGdldCA9IDA7Cit9CisKK3ZvaWQqIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFByb2NBZGRyZXNzKGNvbnN0IFFHTENvbnRleHQq
IGN0eCwgY29uc3QgUVN0cmluZyYgcHJvYykKK3sKKyAgICBRU3RyaW5nIGV4dFszXSA9IHsgIiIs
ICJBUkIiLCAiRVhUIiB9OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAg
ICAgICAgdm9pZCogYWRkciA9IGN0eC0+Z2V0UHJvY0FkZHJlc3MoUUxhdGluMVN0cmluZygocHJv
YyArIGV4dFtpXSkudG9MYXRpbjEoKSkpOworICAgICAgICBpZiAoYWRkcikgCisgICAgICAgICAg
ICByZXR1cm4gYWRkcjsKKyAgICB9CisKKyAgICBxV2FybmluZygpIDw8ICJHcmFwaGljc0NvbnRl
eHQzRDogbm90IGZvdW5kIiA8PCBwcm9jOworCisgICAgbV92YWxpZCA9IGZhbHNlOworICAgIHJl
dHVybiAwOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQoreworICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChuZXcgR3JhcGhpY3NDb250ZXh0M0Qo
YXR0cnMpKTsKKyAgICByZXR1cm4gY29udGV4dC0+bV9pbnRlcm5hbCA/IGNvbnRleHQucmVsZWFz
ZSgpIDogMDsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQorICAgIDogbV9pbnRlcm5hbChuZXcgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbChhdHRycykpCit7CisgICAgaWYgKCFtX2ludGVybmFsLT5p
c1ZhbGlkKCkpIAorICAgICAgICBtX2ludGVybmFsID0gMDsKK30KKworR3JhcGhpY3NDb250ZXh0
M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCit7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKQoreworICAg
IHJldHVybiBtX2ludGVybmFsLT5tX2dsV2lkZ2V0OworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVybiBt
X2ludGVybmFsLT5tX3RleHR1cmU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VD
b250ZXh0Q3VycmVudCgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKworICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5j
YW52YXMoKTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigp
OworCisgICAgbV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgbV9pbnRlcm5hbC0+bV9tYWluRmJvKTsKKworICAgIGdsUmVhZFBpeGVscygw
LCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBtX2ludGVybmFsLT5tX3BpeGVscy5iaXRzKCkpOworCisgICAgUVBhaW50ZXIqIHAg
PSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBwLT5kcmF3
SW1hZ2UoMCwgMCwgbV9pbnRlcm5hbC0+bV9waXhlbHMudHJhbnNmb3JtZWQoUU1hdHJpeCgpLnJv
dGF0ZSgxODApKSk7CisKKyAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ludGVybmFsLT5tX2N1cnJlbnRGYm8pOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICgoKHdp
ZHRoID09IG1fY3VycmVudFdpZHRoKSAmJiAoaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkpIHx8
ICghbV9pbnRlcm5hbCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRXaWR0
aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIG1faW50ZXJu
YWwtPm1fcGl4ZWxzID0gUUltYWdlKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIFFJ
bWFnZTo6Rm9ybWF0X0FSR0IzMik7CisKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybmFs
LT5tX3RleHR1cmUpOworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JB
LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgCisgICAgbV9pbnRlcm5hbC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9pbnRlcm5hbC0+
bV9tYWluRmJvKTsKKyAgICBtX2ludGVybmFsLT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1faW50ZXJuYWwtPm1fZGVwdGhCdWZmZXIpOworI2lmZGVm
IEdMX0RFUFRIX0NPTVBPTkVOVDI0CisgICAgcmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9ERVBUSF9DT01QT05FTlQyNCwgd2lkdGgsIGhlaWdo
dCk7CisjZWxzZQorICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworI2VuZGlm
CisgICAgbV9pbnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCAwKTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm5hbC0+bV90ZXh0dXJlLCAwKTsK
KyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2ludGVybmFsLT5tX2RlcHRoQnVmZmVyKTsK
KworICAgIEdMZW51bSBzdGF0dXMgPSBtX2ludGVybmFsLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUik7CisgICAgaWYgKHN0YXR1cyAhPSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgcVdhcm5pbmco
KSA8PCAiR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGU6IEludmFsaWQgRkJPIiA8PCBjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUik7CisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJf
QklUKTsKKyAgICBnbEZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2
ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBB
U1NFUlQoc2hhZGVyKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIG1faW50ZXJuYWwtPmF0dGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3Qo
KSwgKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT5iaW5kQXR0cmliTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIGluZGV4LCBu
YW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVm
ZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Ymlu
ZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5tX2N1cnJlbnRGYm8g
PSAoYnVmZmVyICYmIGJ1ZmZlci0+b2JqZWN0KCkpID8gKEdMdWludCkgYnVmZmVyLT5vYmplY3Qo
KSA6IG1faW50ZXJuYWwtPm1fbWFpbkZibzsKKyAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZm
ZXIodGFyZ2V0LCBtX2ludGVybmFsLT5tX2N1cnJlbnRGYm8pOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFJl
bmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQs
IHJlbmRlcmJ1ZmZlciA/IChHTHVpbnQpIHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlID8gKEdM
dWludCkgdGV4dHVyZS0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3Vi
bGUgYWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBnbEJsZW5kQ29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlZCksIHN0YXRpY19jYXN0PGZs
b2F0PihncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0PihibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGFscGhhKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24odW5z
aWduZWQgbG9uZyBtb2RlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgZ2xCbGVuZEVxdWF0aW9uKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNp
Z25lZCBsb25nIG1vZGVBbHBoYSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdC
LCBtb2RlQWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmModW5z
aWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEJsZW5kRnVuYyhzZmFjdG9y
LCBkZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVu
Y1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5z
aWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJsZW5k
RnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBp
bnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGEodGFyZ2V0LCBz
aXplLCAwLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBsb25nIHVz
YWdlKQoreworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9pbnRlcm5hbC0+YnVmZmVyRGF0YSh0YXJnZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCksIGFy
cmF5LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBXZWJHTEFy
cmF5KiBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5
LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpKTsKK30KKwordW5zaWduZWQgbG9u
ZyBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25n
IHRhcmdldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIHJldHVybiBtX2ludGVybmFsLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJsZSBn
LCBkb3VibGUgYiwgZG91YmxlIGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBnbENsZWFyQ29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KHIpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oZyksIHN0YXRpY19jYXN0PGZsb2F0PihiKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGEpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIodW5zaWduZWQgbG9u
ZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xDbGVhcihtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0
aChkb3VibGUgZGVwdGgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIGdsQ2xlYXJEZXB0aGYoZGVw
dGgpOworI2Vsc2UKKyAgICBnbENsZWFyRGVwdGgoZGVwdGgpOworI2VuZGlmCit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChsb25nIHMpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENsZWFyU3RlbmNpbChzKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVu
LCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIq
IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmNvbXBpbGVTaGFkZXIoKEdMdWlu
dCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlU
ZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25n
IGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcg
eSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENvcHlUZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1v
ZGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bEN1bGxGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMo
dW5zaWduZWQgbG9uZyBmdW5jKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgZ2xEZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlcHRoTWFzayhib29sIGZsYWcpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERlcHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShkb3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisjaWYgZGVmaW5lZChR
VF9PUEVOR0xfRVNfMikKKyAgICBnbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFyKTsKKyNlbHNlCisg
ICAgZ2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRl
ciogc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJu
YWwtPmRldGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgKEdMdWludCkgc2hh
ZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUodW5z
aWduZWQgbG9uZyBjYXApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBnbERpc2FibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRHJh
d0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1
bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5
cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQp
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZSh1bnNpZ25lZCBsb25nIGNh
cCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGds
RW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEZpbmlzaCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEZsdXNoKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVm
ZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZl
ciA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSwgbG9uZyBsZXZlbCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdl
dCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlID8gKEdMdWludCkgdGV4dHVyZS0+b2Jq
ZWN0KCkgOiAwLCBsZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFj
ZSh1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBnbEZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5nZW5l
cmF0ZU1pcG1hcCh0YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3Rp
dmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbS0+b2JqZWN0KCkpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisg
ICAgR0xpbnQgbWF4TGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFByb2dyYW1pdihzdGF0aWNf
Y2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhf
TEVOR1RILCAmbWF4TGVuZ3RoKTsKKworICAgIEdMY2hhciBuYW1lW21heExlbmd0aF07IAorICAg
IEdMc2l6ZWkgbmFtZUxlbmd0aDsKKyAgICBHTGludCBzaXplOworICAgIEdMZW51bSB0eXBlOwor
CisgICAgbV9pbnRlcm5hbC0+Z2V0QWN0aXZlQXR0cmliKHN0YXRpY19jYXN0PEdMdWludD4ocHJv
Z3JhbS0+b2JqZWN0KCkpLCBpbmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0
eXBlLCBuYW1lKTsKKworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8u
dHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKworICAgIHJldHVybiB0cnVlOwor
fQorICAgIAorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7
CisgICAgaWYgKCFwcm9ncmFtLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBHTGludCBtYXhMZW5n
dGg7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJv
Z3JhbS0+b2JqZWN0KCkpLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4TGVuZ3Ro
KTsKKworICAgIEdMY2hhciBuYW1lW21heExlbmd0aF07CisgICAgR0xzaXplaSBuYW1lTGVuZ3Ro
OworICAgIEdMaW50IHNpemU7CisgICAgR0xlbnVtIHR5cGU7CisKKyAgICBtX2ludGVybmFsLT5n
ZXRBY3RpdmVVbmlmb3JtKHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0KCkpLCBp
bmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKworICAg
IGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5mby5uYW1l
ID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAg
aW5mby5zaXplID0gc2l6ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0
dXJuIG1faW50ZXJuYWwtPmdldEF0dHJpYkxvY2F0aW9uKChHTHVpbnQpIHByb2dyYW0tPm9iamVj
dCgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQoreworICAgIHJl
dHVybiBtX2ludGVybmFsLT5tX2F0dHJzOworfQorCit1bnNpZ25lZCBsb25nIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1faW50ZXJuYWwtPm1fc3ludGhldGljRXJy
b3JzLnNpemUoKSA+IDApIHsKKyAgICAgICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOworICAg
ICAgICB1bnNpZ25lZCBsb25nIGVyciA9ICppdGVyOworICAgICAgICBtX2ludGVybmFsLT5tX3N5
bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQor
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4g
Z2xHZXRFcnJvcigpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyh1
bnNpZ25lZCBsb25nIG5hbWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICByZXR1cm4gU3RyaW5nKChjb25zdCBjaGFyKikgZ2xHZXRTdHJpbmcobmFt
ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAo
IWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzQnVmZmVy
KChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojppc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xJc0VuYWJsZWQoY2FwKTsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBm
cmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+aXNGcmFtZWJ1ZmZlcigoR0x1aW50KSBmcmFtZWJ1ZmZlci0+
b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3Qo
KSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVu
ZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5pc1JlbmRlcmJ1ZmZlcigoR0x1aW50
KSByZW5kZXJidWZmZXItPm9iamVjdCgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzU2hhZGVyKChHTHVpbnQpIHNoYWRl
ci0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUoV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgcmV0dXJuIGdsSXNUZXh0dXJlKChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKGRvdWJsZSB3aWR0aCkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsTGluZVdpZHRo
KHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dy
YW0pOworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+bGlua1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBs
b25nIHBhcmFtKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgZ2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cykKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsUG9seWdvbk9m
ZnNldChzdGF0aWNfY2FzdDxmbG9hdD4oZmFjdG9yKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHVuaXRz
KSk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQ
aXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgCisgICAgaWYgKHR5
cGUgIT0gR0xfVU5TSUdORURfQllURSB8fCBmb3JtYXQgIT0gR0xfUkdCQSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIAorICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBhcnJh
eSA9IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOwor
ICAgIGdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIChHTHZv
aWQqKSBhcnJheS0+ZGF0YSgpKTsKKyAgICByZXR1cm4gYXJyYXk7ICAgIAorfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5yZW5kZXJidWZmZXJTdG9yYWdlKHRh
cmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0KQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xTYW1wbGVD
b3ZlcmFnZShzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpLCBpbnZlcnQpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIGdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIAor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICAvLyBGb3Jj
ZSB0byBHTFNMIDEuMDoKKyAgICAvLyBodHRwczovL2N2cy5raHJvbm9zLm9yZy9zdm4vcmVwb3Mv
cmVnaXN0cnkvdHJ1bmsvcHVibGljL3dlYmdsL2RvYy9zcGVjL1dlYkdMLXNwZWMuaHRtbCM0LjQK
KyAgICAvLyBGSVhNRTogTGluZXMgYmVnaW5uaW5nIHdpdGggIiN2ZXJzaW9uIiBzaG91bGQgYmUg
c3RyaXBwZWQgb3V0LgorCisgICAgU3RyaW5nIHByZXBhcmVkOworICAgCisgICAgcHJlcGFyZWQu
YXBwZW5kKCIjdmVyc2lvbiAxMDBcbiIpOworI2lmZGVmIFFUX09QRU5HTF9FU18yCisgICAgcHJl
cGFyZWQuYXBwZW5kKCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIpOworI2VuZGlmCisgICAg
cHJlcGFyZWQuYXBwZW5kKHN0cmluZyk7CisKKyAgICBjb25zdCBDU3RyaW5nJiBjcyA9IHByZXBh
cmVkLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiBzID0gY3MuZGF0YSgpOworICAgIGludCBsZW5n
dGggPSBwcmVwYXJlZC5sZW5ndGgoKTsKKyAgICBtX2ludGVybmFsLT5zaGFkZXJTb3VyY2UoKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSwgMSwgJnMsICZsZW5ndGgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1
bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNl
LCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU3RlbmNpbE1h
c2sobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJh
dGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5zdGVuY2ls
TWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25l
ZCBsb25nIHpwYXNzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgZ2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNp
Z25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3Mp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgcG5hbWUsIGZsb2F0IHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHN0
YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0
ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCB2YWx1ZSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsVGV4
UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0
IHYwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+dW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9h
dCB2MSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPnVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogYXJyYXksIGlu
dCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YobG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAs
IGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2
Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlv
biwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zZnYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKGxvbmcg
bG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
dW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB2MCkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwt
PnVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5p
Zm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlm
b3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlm
b3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+dW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPnVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBp
bnQgdjIsIGludCB2MykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24s
IGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KGxv
bmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogYXJyYXksIGludCBzaXplKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRy
YW5zcG9zZSwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXg0ZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQo
cHJvZ3JhbSk7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT51c2VQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgCisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52YWxpZGF0
ZVByb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRl
cm5hbC0+dmVydGV4QXR0cmliMWYoaW5keCwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9h
dCB2MSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjJmKGluZHgsIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0
KiBhcnJheSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjJmdihpbmR4LCBhcnJheSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxv
YXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjNmKGluZHgsIHYw
LCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIzZnYo
aW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0
Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0
IHYzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+dmVydGV4QXR0cmliNGYoaW5keCwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxv
bmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGxv
bmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYlBvaW50
ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0
aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbFZpZXdwb3J0KHN0YXRpY19jYXN0PEdMaW50Pih4KSwgc3Rh
dGljX2Nhc3Q8R0xpbnQ+KHkpLCBzdGF0aWNfY2FzdDxHTHNpemVpPih3aWR0aCksIHN0YXRpY19j
YXN0PEdMc2l6ZWk+KGhlaWdodCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRC
b29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lLCB1bnNpZ25lZCBjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0Qm9vbGVh
bnYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVy
UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGlu
dCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25lZCBsb25n
IHBuYW1lLCBmbG9hdCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25n
IHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydih1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xH
ZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBp
bnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgp
LCBwbmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dy
YW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbGVuZ3RoOworICAgIG1faW50ZXJu
YWwtPmdldFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgR0xfSU5GT19MT0df
TEVOR1RILCAmbGVuZ3RoKTsKKworICAgIEdMc2l6ZWkgc2l6ZTsKKworICAgIEdMY2hhciogaW5m
byA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CisgICAgaWYgKCFpbmZvKQorICAgICAg
ICByZXR1cm4gIiI7CisKKyAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtSW5mb0xvZygoR0x1aW50
KSBwcm9ncmFtLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisKKyAgICBTdHJpbmcg
cmVzdWx0KGluZm8pOworICAgIGZhc3RGcmVlKGluZm8pOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgQVNTRVJUKHNoYWRl
cik7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT5nZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBwbmFtZSwgdmFs
dWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coV2Vi
R0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworCisgICAgR0xpbnQgbGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2
KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7
CisKKyAgICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RN
YWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoIWluZm8pCisgICAgICAgIHJldHVybiAiIjsKKworICAg
IG1faW50ZXJuYWwtPmdldFNoYWRlckluZm9Mb2coKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwg
bGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisKKyAgICBTdHJpbmcgcmVzdWx0KGluZm8pOworICAgIGZh
c3RGcmVlKGluZm8pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RyaW5nIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbGVuZ3Ro
OworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCks
IEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbGVuZ3RoKTsKKworICAgIEdMc2l6ZWkgc2l6ZTsK
KyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOworICAgIGlm
ICghaW5mbykKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVy
U291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOwor
CisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZvKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRl
cmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFs
dWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgZmxvYXQqIHZhbHVlKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
Z2V0VW5pZm9ybWZ2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBsb2NhdGlvbiwgdmFsdWUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VW5pZm9ybWl2
KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCitsb25n
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIAor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1f
aW50ZXJuYWwtPmdldFVuaWZvcm1Mb2NhdGlvbigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVy
dGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxv
YXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+Z2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVk
IGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5nZXRW
ZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKworbG9uZyBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2ln
bmVkIGxvbmcgcG5hbWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICAKKyAgICB2b2lkKiBwb2ludGVyOworICAgIG1faW50ZXJuYWwtPmdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGxvbmc+KHBvaW50ZXIpOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50
ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJv
cmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7Cisg
ICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKwor
aW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
KQoreworICAgIEFTU0VSVChpbWFnZSk7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAg
R0x1aW50IGZvcm1hdDsKKyAgICBHTHVpbnQgaW50ZXJuYWxGb3JtYXQ7CisKKyAgICBpZiAoIWV4
dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEs
ICZmb3JtYXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJuYWxGb3JtYXQpKSB7
CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEOiBj
b3VsZCBub3QgZXh0cmFjdCBJbWFnZSBkYXRhIjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K
KworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2Ut
PndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgCisgICAgICAgICAgICAgICAgIDAsIGZvcm1hdCwg
R0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7CisKKyAgICByZXR1cm4gMDsKK30K
KyAgICAKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCB1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUs
IHZvaWQqIHBpeGVscykKK3sKKyAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVy
biAwOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQg
dGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgSW1h
Z2UqIGltYWdlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEpCit7CisgICAgQVNT
RVJUKGltYWdlKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgR0x1aW50
IGZvcm1hdDsKKyAgICBHTHVpbnQgaW50ZXJuYWxGb3JtYXQ7CisKKyAgICBpZiAoIWV4dHJhY3RJ
bWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3Jt
YXQsICZpbnRlcm5hbEZvcm1hdCkpIHsKKyAgICAgICAgcVdhcm5pbmcoKSA8PCAiR3JhcGhpY3ND
b250ZXh0M0Q6OnRleFN1YkltYWdlMkQ6IGNvdWxkIG5vdCBleHRyYWN0IEltYWdlIGRhdGEiOwor
ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZ2xUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmYsIHlvZmYsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIAorICAg
ICAgICAgICAgICAgICAgICBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRh
KCkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVCdWZmZXIoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgR0x1aW50IG87CisgICAgbV9pbnRlcm5hbC0+Z2VuQnVmZmVycygxLCAmbyk7Cisg
ICAgcmV0dXJuIG87Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFt
ZWJ1ZmZlcigpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBHTHVpbnQgbzsKKyAgICBtX2ludGVybmFsLT5nZW5GcmFtZWJ1ZmZlcnMoMSwgJm8pOwor
ICAgIHJldHVybiBvOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJv
Z3JhbSgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlUHJvZ3JhbSgpOworfQorCit1bnNpZ25lZCBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIEdMdWludCBvOworICAgIG1faW50ZXJuYWwt
PmdlblJlbmRlcmJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit1bnNpZ25lZCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2lu
dGVybmFsLT5jcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdN
RU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbzsKKyAgICBnbEdlblRleHR1cmVzKDEsICZvKTsK
KyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVy
KHVuc2lnbmVkIGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1l
YnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9pbnRlcm5hbC0+ZGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0odW5zaWduZWQgcHJvZ3JhbSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCByZW5kZXJidWZmZXIpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVTaGFkZXIodW5zaWduZWQgc2hhZGVyKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlU2hhZGVy
KHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUodW5z
aWduZWQgdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworfQorCitpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNpemVJbkJ5dGVzKGludCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgR0xfQllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGJ5dGUpOworICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsK
KyAgICBjYXNlIEdMX1NIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMc2hvcnQpOworICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQp
OworICAgIGNhc2UgR0xfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAg
IGNhc2UgR0xfRkxPQVQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVycm9yKQoreworICAgIG1faW50
ZXJuYWwtPm1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Cit9CisKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGhhc0FscGhhQ2hhbm5lbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHBoYU9wKiBuZWVkZWRBbHBo
YU9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCog
Zm9ybWF0KQoreworICAgIFFJbWFnZTo6Rm9ybWF0IGltYWdlRm9ybWF0ID0gKCFwcmVtdWx0aXBs
eUFscGhhKSA/IAorICAgICAgICBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIgOgorICAgICAgICBRSW1h
Z2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZDsKKyAKKyAgICBRUGl4bWFwKiBuYXRpdmVQ
aXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsgCisKKyAgICAqaGFz
QWxwaGFDaGFubmVsID0gdHJ1ZTsKKyAgICAqbmVlZGVkQWxwaGFPcCA9IGtBbHBoYURvTm90aGlu
ZzsKKyAgICAqZm9ybWF0ID0gR0xfUkdCQTsKKworICAgIFFJbWFnZSBuYXRpdmVJbWFnZSA9IG5h
dGl2ZVBpeG1hcC0+dG9JbWFnZSgpLmNvbnZlcnRUb0Zvcm1hdChpbWFnZUZvcm1hdCk7CisgICAg
b3V0cHV0VmVjdG9yLmFwcGVuZChuYXRpdmVJbWFnZS5iaXRzKCksIG5hdGl2ZUltYWdlLmJ5dGVD
b3VudCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
M0RfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwIGIv
V2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCmluZGV4IGQ2MGYwOWMuLmU2ZmRmNjEgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAorKysgYi9XZWJLaXQvcXQv
QXBpL3F3ZWJzZXR0aW5ncy5jcHAKQEAgLTE1OCw2ICsxNTgsMTMgQEAgdm9pZCBRV2ViU2V0dGlu
Z3NQcml2YXRlOjphcHBseSgpCiAKICAgICAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdFbmFibGVkKHZhbHVlKTsKICNlbmRpZgorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisg
ICAgICAgIHZhbHVlID0gYXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52
YWx1ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCkpOworCisgICAgICAgIHNldHRpbmdzLT5z
ZXRXZWJHTEVuYWJsZWQodmFsdWUpOworI2VuZGlmCisgCiAgICAgICAgIHZhbHVlID0gYXR0cmli
dXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLT5hdHRyaWJ1dGVzLnZhbHVl
KFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzKSk7CiAgICAgICAgIHNldHRp
bmdzLT5zZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KHZhbHVlKTsKQEAg
LTQwMSw2ICs0MDgsNyBAQCBRV2ViU2V0dGluZ3M6OlFXZWJTZXR0aW5ncygpCiAgICAgZC0+YXR0
cmlidXRlcy5pbnNlcnQoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVV
cmxzLCBmYWxzZSk7CiAgICAgZC0+YXR0cmlidXRlcy5pbnNlcnQoUVdlYlNldHRpbmdzOjpMb2Nh
bENvbnRlbnRDYW5BY2Nlc3NGaWxlVXJscywgdHJ1ZSk7CiAgICAgZC0+YXR0cmlidXRlcy5pbnNl
cnQoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgZmFsc2UpOwor
ICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkLCBmYWxz
ZSk7CiAgICAgZC0+b2ZmbGluZVN0b3JhZ2VEZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7
CiAgICAgZC0+ZGVmYXVsdFRleHRFbmNvZGluZyA9IFFMYXRpbjFTdHJpbmcoImlzby04ODU5LTEi
KTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmggYi9XZWJLaXQv
cXQvQXBpL3F3ZWJzZXR0aW5ncy5oCmluZGV4IGIxZjVjZjIuLjI5YzAxYjYgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0
dGluZ3MuaApAQCAtNzAsNyArNzAsOCBAQCBwdWJsaWM6CiAgICAgICAgIExvY2FsQ29udGVudENh
bkFjY2Vzc0ZpbGVVcmxzLAogICAgICAgICBEbnNQcmVmZXRjaEVuYWJsZWQsCiAgICAgICAgIFhT
U0F1ZGl0b3JFbmFibGVkLAotICAgICAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZAor
ICAgICAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwKKyAgICAgICAgV2ViR0xFbmFi
bGVkCiAgICAgfTsKICAgICBlbnVtIFdlYkdyYXBoaWMgewogICAgICAgICBNaXNzaW5nSW1hZ2VH
cmFwaGljLApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1FHVkxhdW5jaGVyL21haW4uY3BwIGIvV2Vi
S2l0L3F0L1FHVkxhdW5jaGVyL21haW4uY3BwCmluZGV4IDQ0OGI0YjAuLjMwN2UxMTggMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9RR1ZMYXVuY2hlci9tYWluLmNwcAorKysgYi9XZWJLaXQvcXQvUUdW
TGF1bmNoZXIvbWFpbi5jcHAKQEAgLTUyMSw2ICs1MjEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgICAgIHVybCA9IGFyZ3MuYXQoMSk7CiAgICAgaWYgKGFyZ3MuY29u
dGFpbnMoIi0tY29tcG9zaXRpbmciKSkKICAgICAgICAgUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0
aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZCwgdHJ1ZSk7CisgICAgaWYgKGFyZ3MuY29udGFpbnMoIi0td2ViZ2wiKSkKKyAgICAg
ICAgUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRp
bmdzOjpXZWJHTEVuYWJsZWQsIHRydWUpOwogCiAgICAgTWFpbldpbmRvdyogd2luZG93ID0gbmV3
IE1haW5XaW5kb3c7CiAgICAgd2luZG93LT5sb2FkKHVybCk7CmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9RdExhdW5jaGVyL21haW4uY3BwIGIvV2ViS2l0VG9vbHMvUXRMYXVuY2hlci9tYWluLmNw
cAppbmRleCAxMjAzY2U3Li45NGU3OTNkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9RdExhdW5j
aGVyL21haW4uY3BwCisrKyBiL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAKQEAgLTEx
Niw2ICsxMTYsNyBAQCBwcm90ZWN0ZWQgc2xvdHM6CiAKICAgICB2b2lkIHNldFRvdWNoTW9ja2lu
Zyhib29sIG9uKTsKICAgICB2b2lkIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCB0
b2dnbGUpOworICAgIHZvaWQgdG9nZ2xlV2ViR0woYm9vbCB0b2dnbGUpOwogICAgIHZvaWQgaW5p
dGlhbGl6ZVZpZXcoYm9vbCB1c2VHcmFwaGljc1ZpZXcgPSBmYWxzZSk7CiAKIHB1YmxpYyBzbG90
czoKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZyhib29sIHRvZ2dsZSkKICAgICBwYWdlKCktPnNldHRpbmdzKCktPnNl
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCB0
b2dnbGUpOwogfQogCit2b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVXZWJHTChib29sIHRvZ2ds
ZSkKK3sKKyAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6
OldlYkdMRW5hYmxlZCwgdG9nZ2xlKTsKK30KKwogdm9pZCBMYXVuY2hlcldpbmRvdzo6aW5pdGlh
bGl6ZVZpZXcoYm9vbCB1c2VHcmFwaGljc1ZpZXcpCiB7CiAgICAgZGVsZXRlIG1fdmlldzsKQEAg
LTU2OSw2ICs1NzUsMTQgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6c2V0dXBVSSgpCiAgICAgZmxp
cFlBbmltYXRlZCA9IGdyYXBoaWNzVmlld01lbnUtPmFkZEFjdGlvbigiQW5pbWF0ZWQgWS1GbGlw
Iik7CiAgICAgZmxpcFlBbmltYXRlZC0+Y29ubmVjdCh0b2dnbGVHcmFwaGljc1ZpZXcsIFNJR05B
TCh0b2dnbGVkKGJvb2wpKSwgU0xPVChzZXRFbmFibGVkKGJvb2wpKSk7CiAgICAgZmxpcFlBbmlt
YXRlZC0+c2V0RW5hYmxlZChmYWxzZSk7CisKKyAgICBRQWN0aW9uKiB0b2dnbGVXZWJHTCA9IHRv
b2xzTWVudS0+YWRkQWN0aW9uKCJUb2dnbGUgV2ViR0wiLCB0aGlzLCBTTE9UKHRvZ2dsZVdlYkdM
KGJvb2wpKSk7CisgICAgdG9nZ2xlV2ViR0wtPnNldENoZWNrYWJsZSh0cnVlKTsKKyAgICB0b2dn
bGVXZWJHTC0+c2V0Q2hlY2tlZChmYWxzZSk7CisKKyAgICBRQWN0aW9uKiB0b2dnbGVHcmFwaGlj
c1ZpZXcgPSB0b29sc01lbnUtPmFkZEFjdGlvbigiVG9nZ2xlIHVzZSBvZiBRR3JhcGhpY3NWaWV3
IiwgdGhpcywgU0xPVChpbml0aWFsaXplVmlldyhib29sKSkpOworICAgIHRvZ2dsZUdyYXBoaWNz
Vmlldy0+c2V0Q2hlY2thYmxlKHRydWUpOworICAgIHRvZ2dsZUdyYXBoaWNzVmlldy0+c2V0Q2hl
Y2tlZChmYWxzZSk7CiB9CiAKIFFXZWJQYWdlKiBXZWJQYWdlOjpjcmVhdGVXaW5kb3coUVdlYlBh
Z2U6OldlYldpbmRvd1R5cGUgdHlwZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49279</attachid>
            <date>2010-02-23 05:13:53 -0800</date>
            <delta_ts>2010-02-23 06:17:04 -0800</delta_ts>
            <desc>Qt WebGL support</desc>
            <filename>qt-webgl-support-4.diff</filename>
            <type>text/plain</type>
            <size>75519</size>
            <attacher name="Jarkko Sakkinen">jarkko.sakkinen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9XZWJDb3JlL1dlYkNvcmUucHJpCmlu
ZGV4IDI3ZjFiYjYuLmZjNzlmOGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMjg3LDggKzI4NywxNyBAQCBJRExfQklORElOR1Mg
Kz0gXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaWRsIFwKICAgICBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlk
bCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9X
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5pZGwgXAorICAgIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRsIFwKICAg
ICBodG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJH
TFRleHR1cmUuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwg
XAogICAgIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRsIFwKICAgICBodG1s
L2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaWRsIFwKICAgICBodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkU2hvcnRBcnJheS5pZGwgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBy
byBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYzYyNTIyNC4uOGNjOTYxZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yNjg1
LDYgKzI2ODUsODcgQEAgU09VUkNFUyArPSBcCiB9CiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVO
QUJMRV8zRF9DQU5WQVM9MSkgeworUVQgKz0gb3BlbmdsCitIRUFERVJTICs9IFwKKwliaW5kaW5n
cy9qcy9KU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dl
YkdMQXJyYXlIZWxwZXIuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVj
dG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IuaCBcCisJ
YmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMv
SlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWdu
ZWRJbnRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwlodG1sL2NhbnZhcy9DYW52YXNDb250ZXh0QXR0cmli
dXRlcy5oIFwKKwlodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xBY3RpdmVJbmZvLmggXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXlCdWZmZXIuaCBcCisJaHRt
bC9jYW52YXMvV2ViR0xBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oIFwKKwlo
dG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTENvbnRleHRB
dHRyaWJ1dGVzLmggXAorCWh0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5oIFwKKwlodG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdMR2V0SW5mby5oIFwK
KwlodG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oIFwKKwlodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCBcCisJ
aHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMVGV4dHVy
ZS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIFwKKwlodG1sL2NhbnZh
cy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJ
bnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oIFwKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIAorCitTT1VSQ0VTICs9IFwK
KwliaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRp
bmdzL2pzL0pTV2ViR0xBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRl
QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDdXN0
b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmNwcCBc
CisJYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9q
cy9KU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xJ
bnRBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5j
cHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGlu
Z3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5n
cy9qcy9KU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9K
U1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNX
ZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcCBcCisJaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0
dHJpYnV0ZXMuY3BwIFwKKyAgICBodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuY3BwIFwKKwlodG1s
L2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xBcnJheS5j
cHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xC
eXRlQXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCBc
CisJaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMR2V0SW5mby5jcHAgXAorCWh0bWwv
Y2FudmFzL1dlYkdMSW50QXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3Bw
IFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcCBc
CisJaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xU
ZXh0dXJlLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwIFwKKwlo
dG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xVbnNpZ25lZEludEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0
QXJyYXkuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAg
XAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIFwKKwor
fQorCisKIGluY2x1ZGUoJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9oZWFkZXJzLnByaSkKIGluY2x1
ZGUoLi4vaW5jbHVkZS9RdFdlYktpdC9jbGFzc2hlYWRlcnMucHJpKQogSEVBREVSUyArPSAkJFdF
QktJVF9BUElfSEVBREVSUwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCmluZGV4IDBhNDFkYzYuLmNmMWRmNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTQ0LDYgKzQ0LDEzIEBAIHR5cGVkZWYg
dm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsKIGNvbnN0ICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEID0gMDsKIHR5cGVkZWYgR0x1
aW50IFBsYXRmb3JtM0RPYmplY3Q7CiBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9y
bTNET2JqZWN0ID0gMDsKKyNlbGlmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFF0T3BlbkdML1F0
T3BlbkdMPgorCit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7Citjb25z
dCAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBOdWxsUGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCA9IDA7Cit0eXBlZGVmIGludCBQbGF0Zm9ybTNET2JqZWN0OworY29uc3QgUGxhdGZvcm0zRE9i
amVjdCBOdWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEOwogY29uc3QgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
TnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgPSAwOwpAQCAtNzMsNyArODAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgfTsKIAogICAgIC8vIEZJWE1FOiBpZGVhbGx5IHRoaXMgd291
bGQgYmUgdXNlZCBvbiBhbGwgcGxhdGZvcm1zLgotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2lm
IFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShRVCkKICAgICBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOwogI2VuZGlmCiAKQEAgLTQwOSw2ICs0MTYsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CiAgICAgICAg
IFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7CisjZWxpZiBQTEFURk9S
TShRVCkKKyAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKCk7CisgICAgICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkg
Y29uc3Q7CiAjZWxzZQogICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRDsgfQogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNv
bnN0IHsgcmV0dXJuIE51bGxQbGF0Zm9ybTNET2JqZWN0OyB9CkBAIC03MDQsNyArNzE0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmICAgICAgICAKIAogICAgICAgICAvLyBGSVhNRTog
aWRlYWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRmb3Jtcy4KLSNpZiBQTEFURk9S
TShDSFJPTUlVTSkKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oUVQpCiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOwogICAgICAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbD4gbV9pbnRlcm5hbDsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3MTJkYQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5j
cHAKQEAgLTAsMCArMSwxNzE5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBUaWV0byBD
b3Jwb3JhdGlvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
ICAgIAorICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1
ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJX
ZWJHTEFjdGl2ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJHTEFycmF5LmgiCisjaW5jbHVkZSAiV2Vi
R0xCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTEZsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJH
TEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xJbnRBcnJheS5oIgorI2luY2x1ZGUgIldl
YkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAi
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKKyNpbmNs
dWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Lmgi
CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBkZWZpbmVkIChRVF9PUEVOR0xfRVNfMikgJiYg
IWRlZmluZWQoR0xjaGFyKQordHlwZWRlZiBjaGFyIEdMY2hhcjsKKyNlbmRpZgorCisjaWZuZGVm
IEFQSUVOVFJZCisjZGVmaW5lIEFQSUVOVFJZCisjZW5kaWYKKwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xBY3RpdmVUZXh0dXJlVHlwZSkgKEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbEF0dGFjaFNoYWRlclR5cGUpIChHTHVpbnQsIEdMdWludCk7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZICpnbEJpbmRBdHRyaWJMb2NhdGlvblR5cGUpIChHTHVpbnQsIEdMdWludCwgY29u
c3QgY2hhciAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQmluZEJ1ZmZlclR5cGUpIChH
TGVudW0sIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEJpbmRGcmFtZWJ1ZmZl
clR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgZnJhbWVidWZmZXIpOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSAqZ2xCaW5kUmVuZGVyYnVmZmVyVHlwZSkgKEdMZW51bSB0YXJnZXQsIEdMdWlu
dCByZW5kZXJidWZmZXIpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xCbGVuZENvbG9yVHlw
ZSkgKEdMY2xhbXBmLCBHTGNsYW1wZiwgR0xjbGFtcGYsIEdMY2xhbXBmKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlVHlwZSkoR0xlbnVtIG1vZGVSR0Is
IEdMZW51bSBtb2RlQWxwaGEpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xCbGVuZEZ1bmNT
ZXBhcmF0ZVR5cGUpKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBo
YSwgR0xlbnVtIGRzdEFscGhhKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQnVmZmVyRGF0
YVR5cGUpIChHTGVudW0sIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCAqLCBHTGVudW0pOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xCdWZmZXJTdWJEYXRhVHlwZSkgKEdMZW51bSwgR0xpbnRw
dHIsIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCAqKTsKK3R5cGVkZWYgR0xlbnVtIChBUElFTlRS
WSAqZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzVHlwZSkgKEdMZW51bSB0YXJnZXQpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqZ2xDb21waWxlU2hhZGVyVHlwZSkgKEdMdWludCk7Cit0eXBlZGVm
IEdMdWludCAoQVBJRU5UUlkgKmdsQ3JlYXRlUHJvZ3JhbVR5cGUpICgpOwordHlwZWRlZiBHTHVp
bnQgKEFQSUVOVFJZICpnbENyZWF0ZVNoYWRlclR5cGUpIChHTGVudW0pOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSAqZ2xEZWxldGVCdWZmZXJzVHlwZSkgKEdMc2l6ZWksIGNvbnN0IEdMdWludCAq
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGVsZXRlRnJhbWVidWZmZXJzVHlwZSkgKEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50ICpmcmFtZWJ1ZmZlcnMpOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xEZWxldGVQcm9ncmFtVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlKSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQg
KnJlbmRlcmJ1ZmZlcnMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xEZWxldGVTaGFkZXJU
eXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGV0YWNoU2hhZGVyVHlw
ZSkgKEdMdWludCwgR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZICpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlwZSkgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBHTHVpbnQgcmVuZGVy
YnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRnJhbWVidWZmZXJUZXh0dXJlMkRU
eXBlKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQs
IEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpn
bEdlbkJ1ZmZlcnNUeXBlKSAoR0xzaXplaSwgR0x1aW50ICopOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqZ2xHZW5lcmF0ZU1pcG1hcFR5cGUpIChHTGVudW0gdGFyZ2V0KTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsR2VuRnJhbWVidWZmZXJzVHlwZSkgKEdMc2l6ZWkgbiwgR0x1aW50ICpm
cmFtZWJ1ZmZlcnMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZW5SZW5kZXJidWZmZXJz
VHlwZSkgKEdMc2l6ZWkgbiwgR0x1aW50ICpyZW5kZXJidWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkgKmdsR2V0QWN0aXZlQXR0cmliVHlwZSkgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQg
aW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqIGxlbmd0aCwgR0xpbnQgKiBzaXplLCBH
TGVudW0gKiB0eXBlLCBHTGNoYXIgKiBuYW1lKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmds
R2V0QWN0aXZlVW5pZm9ybVR5cGUpIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKiBsZW5ndGgsIEdMaW50ICogc2l6ZSwgR0xlbnVtICogdHlw
ZSwgR0xjaGFyICogbmFtZSk7Cit0eXBlZGVmIEdMaW50IChBUElFTlRSWSAqZ2xHZXRBdHRyaWJM
b2NhdGlvblR5cGUpIChHTHVpbnQsIGNvbnN0IGNoYXIgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbEdldEJ1ZmZlclBhcmFtZXRlcml2VHlwZSkgKEdMZW51bSwgR0xlbnVtLCBHTGludCAq
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXZUeXBlKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBw
bmFtZSwgR0xpbnQgKnBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdldFByb2dy
YW1JbmZvTG9nVHlwZSkgKEdMdWludCwgR0xzaXplaSwgR0xzaXplaSAqLCBjaGFyICopOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRQcm9ncmFtaXZUeXBlKSAoR0x1aW50LCBHTGVudW0s
IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdlR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMp
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRTaGFkZXJJbmZvTG9nVHlwZSkgKEdMdWlu
dCwgR0xzaXplaSwgR0xzaXplaSAqLCBjaGFyICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAq
Z2xHZXRTaGFkZXJpdlR5cGUpIChHTHVpbnQsIEdMZW51bSwgR0xpbnQgKik7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZICpnbEdldFNoYWRlclNvdXJjZVR5cGUpIChHTHVpbnQsIEdMc2l6ZWksIEdM
c2l6ZWkgKiwgY2hhciAqKTsKK3R5cGVkZWYgR0xpbnQgKEFQSUVOVFJZICpnbEdldFVuaWZvcm1M
b2NhdGlvblR5cGUpIChHTHVpbnQsIGNvbnN0IGNoYXIqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsR2V0VW5pZm9ybWZ2VHlwZSkgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwg
R0xmbG9hdCAqIHBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdldFVuaWZvcm1p
dlR5cGUpIChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMaW50ICogcGFyYW1zKTsK
K3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0VmVydGV4QXR0cmliZnZUeXBlKSAoR0x1aW50
IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKiBwYXJhbXMpOwordHlwZWRlZiB2b2lkIChB
UElFTlRSWSAqZ2xHZXRWZXJ0ZXhBdHRyaWJpdlR5cGUpIChHTHVpbnQgaW5kZXgsIEdMZW51bSBw
bmFtZSwgR0xpbnQgKiBwYXJhbXMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRWZXJ0
ZXhBdHRyaWJQb2ludGVydlR5cGUpIChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0x2b2lk
ICoqIHBvaW50ZXIpOwordHlwZWRlZiBHTGJvb2xlYW4gKEFQSUVOVFJZICpnbElzQnVmZmVyVHlw
ZSkgKEdMdWludCBidWZmZXIpOwordHlwZWRlZiBHTGJvb2xlYW4gKEFQSUVOVFJZICpnbElzRnJh
bWVidWZmZXJUeXBlKSAoR0x1aW50IGZyYW1lYnVmZmVyKTsKK3R5cGVkZWYgR0xib29sZWFuIChB
UElFTlRSWSAqZ2xJc1Byb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgR0xib29sZWFuIChB
UElFTlRSWSAqZ2xJc1JlbmRlcmJ1ZmZlclR5cGUpIChHTHVpbnQgcmVuZGVyYnVmZmVyKTsKK3R5
cGVkZWYgR0xib29sZWFuIChBUElFTlRSWSAqZ2xJc1NoYWRlclR5cGUpIChHTHVpbnQpOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xMaW5rUHJvZ3JhbVR5cGUpIChHTHVpbnQpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqZ2xSZW5kZXJidWZmZXJTdG9yYWdlVHlwZSkgKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xTaGFkZXJTb3VyY2VUeXBlKSAoR0x1aW50LCBH
THNpemVpLCBjb25zdCBjaGFyICoqLCBjb25zdCBHTGludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkgKmdsU3RlbmNpbEZ1bmNTZXBhcmF0ZVR5cGUpIChHTGVudW0gZmFjZSwgR0xlbnVtIGZ1
bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xT
dGVuY2lsTWFza1NlcGFyYXRlVHlwZSkgKEdMZW51bSBmYWNlLCBHTHVpbnQgbWFzayk7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZICpnbFN0ZW5jaWxPcFNlcGFyYXRlVHlwZSkgKEdMZW51bSBmYWNl
LCBHTGVudW0gc2ZhaWwsIEdMZW51bSBkcGZhaWwsIEdMZW51bSBkcHBhc3MpOwordHlwZWRlZiB2
b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtMWZUeXBlKSAoR0xpbnQsIEdMZmxvYXQpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtMWZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25z
dCBHTGZsb2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtMWlUeXBlKSAo
R0xpbnQsIEdMaW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTFpdlR5cGUp
IChHTGludCwgR0xzaXplaSwgY29uc3QgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpnbFVuaWZvcm0yZlR5cGUpIChHTGludCwgR0xmbG9hdCwgR0xmbG9hdCk7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZICpnbFVuaWZvcm0yZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNvbnN0IEdM
ZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm0yaVR5cGUpIChHTGlu
dCwgR0xpbnQsIEdMaW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTJpdlR5
cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbFVuaWZvcm0zZlR5cGUpIChHTGludCwgR0xmbG9hdCwgR0xmbG9hdCwgR0xmbG9hdCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm0zZnZUeXBlKSAoR0xpbnQsIEdMc2l6
ZWksIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm0z
aVR5cGUpIChHTGludCwgR0xpbnQsIEdMaW50LCBHTGludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbFVuaWZvcm0zaXZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNvbnN0IEdMaW50ICopOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtNGZUeXBlKSAoR0xpbnQsIEdMZmxvYXQs
IEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xV
bmlmb3JtNGZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0ICopOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtNGlUeXBlKSAoR0xpbnQsIEdMaW50LCBHTGludCwg
R0xpbnQsIEdMaW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTRpdlR5cGUp
IChHTGludCwgR0xzaXplaSwgY29uc3QgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpnbFVuaWZvcm1NYXRyaXgyZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwgY29u
c3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybU1hdHJpeDNm
dlR5cGUpIChHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0ICopOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtTWF0cml4NGZ2VHlwZSkgKEdMaW50LCBHTHNp
emVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpnbFVzZVByb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmds
VmFsaWRhdGVQcm9ncmFtVHlwZSkgKEdMdWludCBwcm9ncmFtKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkgKmdsVmVydGV4QXR0cmliMWZUeXBlKSAoR0x1aW50LCBjb25zdCBHTGZsb2F0KTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliMWZ2VHlwZSkgKEdMdWludCwgY29u
c3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliMmZU
eXBlKSAoR0x1aW50LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliMmZ2VHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9h
dCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliM2ZUeXBlKSAoR0x1
aW50LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0KTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliM2Z2VHlwZSkgKEdMdWludCwgY29uc3Qg
R0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliNGZUeXBl
KSAoR0x1aW50LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0LCBj
b25zdCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVmVydGV4QXR0cmliNGZ2
VHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkg
KmdsVmVydGV4QXR0cmliUG9pbnRlclR5cGUpIChHTHVpbnQsIEdMaW50LCBHTGVudW0sIEdMYm9v
bGVhbiwgR0xzaXplaSwgY29uc3QgR0x2b2lkICopOworCitjbGFzcyBHcmFwaGljc0NvbnRleHQz
REludGVybmFsIHsKK3B1YmxpYzoKKworICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpOworICAgIH5HcmFwaGljc0NvbnRleHQz
REludGVybmFsKCk7CisKKyAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiBtX3ZhbGlkOyB9CisK
K3B1YmxpYzoKKworICAgIGdsQWN0aXZlVGV4dHVyZVR5cGUgYWN0aXZlVGV4dHVyZTsKKyAgICBn
bEF0dGFjaFNoYWRlclR5cGUgYXR0YWNoU2hhZGVyOworICAgIGdsQmluZEF0dHJpYkxvY2F0aW9u
VHlwZSBiaW5kQXR0cmliTG9jYXRpb247CisgICAgZ2xCaW5kQnVmZmVyVHlwZSBiaW5kQnVmZmVy
OworICAgIGdsQmluZEZyYW1lYnVmZmVyVHlwZSBiaW5kRnJhbWVidWZmZXI7CisgICAgZ2xCaW5k
UmVuZGVyYnVmZmVyVHlwZSBiaW5kUmVuZGVyYnVmZmVyOworICAgIGdsQmxlbmRDb2xvclR5cGUg
YmxlbmRDb2xvcjsKKyAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZVR5cGUgYmxlbmRFcXVhdGlv
blNlcGFyYXRlOworICAgIGdsQmxlbmRGdW5jU2VwYXJhdGVUeXBlIGJsZW5kRnVuY1NlcGFyYXRl
OworICAgIGdsQnVmZmVyRGF0YVR5cGUgYnVmZmVyRGF0YTsKKyAgICBnbEJ1ZmZlclN1YkRhdGFU
eXBlIGJ1ZmZlclN1YkRhdGE7CisgICAgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzVHlwZSBjaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzOworICAgIGdsQ29tcGlsZVNoYWRlclR5cGUgY29tcGlsZVNoYWRl
cjsKKyAgICBnbENyZWF0ZVByb2dyYW1UeXBlIGNyZWF0ZVByb2dyYW07CisgICAgZ2xDcmVhdGVT
aGFkZXJUeXBlIGNyZWF0ZVNoYWRlcjsKKyAgICBnbERlbGV0ZUJ1ZmZlcnNUeXBlIGRlbGV0ZUJ1
ZmZlcnM7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNUeXBlIGRlbGV0ZUZyYW1lYnVmZmVyczsK
KyAgICBnbERlbGV0ZVByb2dyYW1UeXBlIGRlbGV0ZVByb2dyYW07CisgICAgZ2xEZWxldGVSZW5k
ZXJidWZmZXJzVHlwZSBkZWxldGVSZW5kZXJidWZmZXJzOworICAgIGdsRGVsZXRlU2hhZGVyVHlw
ZSBkZWxldGVTaGFkZXI7CisgICAgZ2xEZXRhY2hTaGFkZXJUeXBlIGRldGFjaFNoYWRlcjsKKyAg
ICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGUgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
OworICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXlUeXBlIGVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5OworICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJUeXBlIGZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRUeXBlIGZyYW1lYnVmZmVyVGV4dHVy
ZTJEOworICAgIGdsR2VuQnVmZmVyc1R5cGUgZ2VuQnVmZmVyczsKKyAgICBnbEdlbmVyYXRlTWlw
bWFwVHlwZSBnZW5lcmF0ZU1pcG1hcDsKKyAgICBnbEdlbkZyYW1lYnVmZmVyc1R5cGUgZ2VuRnJh
bWVidWZmZXJzOworICAgIGdsR2VuUmVuZGVyYnVmZmVyc1R5cGUgZ2VuUmVuZGVyYnVmZmVyczsK
KyAgICBnbEdldEFjdGl2ZUF0dHJpYlR5cGUgZ2V0QWN0aXZlQXR0cmliOworICAgIGdsR2V0QWN0
aXZlVW5pZm9ybVR5cGUgZ2V0QWN0aXZlVW5pZm9ybTsKKyAgICBnbEdldEF0dHJpYkxvY2F0aW9u
VHlwZSBnZXRBdHRyaWJMb2NhdGlvbjsKKyAgICBnbEdldEJ1ZmZlclBhcmFtZXRlcml2VHlwZSBn
ZXRCdWZmZXJQYXJhbWV0ZXJpdjsKKyAgICBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2VHlwZSBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdjsKKyAgICBnbEdl
dFByb2dyYW1JbmZvTG9nVHlwZSBnZXRQcm9ncmFtSW5mb0xvZzsKKyAgICBnbEdldFByb2dyYW1p
dlR5cGUgZ2V0UHJvZ3JhbWl2OworICAgIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZUeXBl
IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2OworICAgIGdsR2V0U2hhZGVySW5mb0xvZ1R5cGUg
Z2V0U2hhZGVySW5mb0xvZzsKKyAgICBnbEdldFNoYWRlcml2VHlwZSBnZXRTaGFkZXJpdjsKKyAg
ICBnbEdldFNoYWRlclNvdXJjZVR5cGUgZ2V0U2hhZGVyU291cmNlOworICAgIGdsR2V0VW5pZm9y
bWZ2VHlwZSBnZXRVbmlmb3JtZnY7CisgICAgZ2xHZXRVbmlmb3JtaXZUeXBlIGdldFVuaWZvcm1p
djsKKyAgICBnbEdldFVuaWZvcm1Mb2NhdGlvblR5cGUgZ2V0VW5pZm9ybUxvY2F0aW9uOworICAg
IGdsR2V0VmVydGV4QXR0cmliZnZUeXBlIGdldFZlcnRleEF0dHJpYmZ2OworICAgIGdsR2V0VmVy
dGV4QXR0cmliaXZUeXBlIGdldFZlcnRleEF0dHJpYml2OworICAgIGdsR2V0VmVydGV4QXR0cmli
UG9pbnRlcnZUeXBlIGdldFZlcnRleEF0dHJpYlBvaW50ZXJ2OworICAgIGdsSXNCdWZmZXJUeXBl
IGlzQnVmZmVyOworICAgIGdsSXNGcmFtZWJ1ZmZlclR5cGUgaXNGcmFtZWJ1ZmZlcjsKKyAgICBn
bElzUHJvZ3JhbVR5cGUgaXNQcm9ncmFtOworICAgIGdsSXNSZW5kZXJidWZmZXJUeXBlIGlzUmVu
ZGVyYnVmZmVyOworICAgIGdsSXNTaGFkZXJUeXBlIGlzU2hhZGVyOworICAgIGdsTGlua1Byb2dy
YW1UeXBlIGxpbmtQcm9ncmFtOworICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZVR5cGUgcmVuZGVy
YnVmZmVyU3RvcmFnZTsKKyAgICBnbFNoYWRlclNvdXJjZVR5cGUgc2hhZGVyU291cmNlOworICAg
IGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZVR5cGUgc3RlbmNpbEZ1bmNTZXBhcmF0ZTsKKyAgICBnbFN0
ZW5jaWxNYXNrU2VwYXJhdGVUeXBlIHN0ZW5jaWxNYXNrU2VwYXJhdGU7CisgICAgZ2xTdGVuY2ls
T3BTZXBhcmF0ZVR5cGUgc3RlbmNpbE9wU2VwYXJhdGU7CisgICAgZ2xVbmlmb3JtMWZUeXBlIHVu
aWZvcm0xZjsKKyAgICBnbFVuaWZvcm0xZnZUeXBlIHVuaWZvcm0xZnY7CisgICAgZ2xVbmlmb3Jt
MWlUeXBlIHVuaWZvcm0xaTsKKyAgICBnbFVuaWZvcm0xaXZUeXBlIHVuaWZvcm0xaXY7CisgICAg
Z2xVbmlmb3JtMmZUeXBlIHVuaWZvcm0yZjsKKyAgICBnbFVuaWZvcm0yZnZUeXBlIHVuaWZvcm0y
ZnY7CisgICAgZ2xVbmlmb3JtMmlUeXBlIHVuaWZvcm0yaTsKKyAgICBnbFVuaWZvcm0yaXZUeXBl
IHVuaWZvcm0yaXY7CisgICAgZ2xVbmlmb3JtM2ZUeXBlIHVuaWZvcm0zZjsKKyAgICBnbFVuaWZv
cm0zZnZUeXBlIHVuaWZvcm0zZnY7CisgICAgZ2xVbmlmb3JtM2lUeXBlIHVuaWZvcm0zaTsKKyAg
ICBnbFVuaWZvcm0zaXZUeXBlIHVuaWZvcm0zaXY7CisgICAgZ2xVbmlmb3JtNGZUeXBlIHVuaWZv
cm00ZjsKKyAgICBnbFVuaWZvcm00ZnZUeXBlIHVuaWZvcm00ZnY7CisgICAgZ2xVbmlmb3JtNGlU
eXBlIHVuaWZvcm00aTsKKyAgICBnbFVuaWZvcm00aXZUeXBlIHVuaWZvcm00aXY7CisgICAgZ2xV
bmlmb3JtTWF0cml4MmZ2VHlwZSB1bmlmb3JtTWF0cml4MmZ2OworICAgIGdsVW5pZm9ybU1hdHJp
eDNmdlR5cGUgdW5pZm9ybU1hdHJpeDNmdjsKKyAgICBnbFVuaWZvcm1NYXRyaXg0ZnZUeXBlIHVu
aWZvcm1NYXRyaXg0ZnY7CisgICAgZ2xVc2VQcm9ncmFtVHlwZSB1c2VQcm9ncmFtOworICAgIGds
VmFsaWRhdGVQcm9ncmFtVHlwZSB2YWxpZGF0ZVByb2dyYW07CisgICAgZ2xWZXJ0ZXhBdHRyaWIx
ZlR5cGUgdmVydGV4QXR0cmliMWY7CisgICAgZ2xWZXJ0ZXhBdHRyaWIxZnZUeXBlIHZlcnRleEF0
dHJpYjFmdjsKKyAgICBnbFZlcnRleEF0dHJpYjJmVHlwZSB2ZXJ0ZXhBdHRyaWIyZjsKKyAgICBn
bFZlcnRleEF0dHJpYjJmdlR5cGUgdmVydGV4QXR0cmliMmZ2OworICAgIGdsVmVydGV4QXR0cmli
M2ZUeXBlIHZlcnRleEF0dHJpYjNmOworICAgIGdsVmVydGV4QXR0cmliM2Z2VHlwZSB2ZXJ0ZXhB
dHRyaWIzZnY7CisgICAgZ2xWZXJ0ZXhBdHRyaWI0ZlR5cGUgdmVydGV4QXR0cmliNGY7CisgICAg
Z2xWZXJ0ZXhBdHRyaWI0ZnZUeXBlIHZlcnRleEF0dHJpYjRmdjsKKyAgICBnbFZlcnRleEF0dHJp
YlBvaW50ZXJUeXBlIHZlcnRleEF0dHJpYlBvaW50ZXI7CisKK3B1YmxpYzoKKworICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cnM7CisgICAgUUdMV2lkZ2V0KiBtX2dsV2lk
Z2V0OworICAgIEdMdWludCBtX3RleHR1cmU7CisgICAgR0x1aW50IG1fbWFpbkZibzsKKyAgICBH
THVpbnQgbV9jdXJyZW50RmJvOworICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOworICAgIFFJbWFn
ZSBtX3BpeGVsczsKKyAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBtX3N5bnRoZXRpY0Vy
cm9yczsKKworcHJpdmF0ZToKKworICAgIHZvaWQqIGdldFByb2NBZGRyZXNzKGNvbnN0IFFHTENv
bnRleHQqIGN0eCwgY29uc3QgUVN0cmluZyYgcHJvYyk7CisKK3ByaXZhdGU6CisKKyAgICBib29s
IG1fdmFsaWQ7Cit9OworCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRl
eHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQorICAgIDog
bV9hdHRycyhhdHRycykKKyAgICAsIG1fZ2xXaWRnZXQoMCkKKyAgICAsIG1fdGV4dHVyZSgwKQor
ICAgICwgbV9tYWluRmJvKDApCisgICAgLCBtX2N1cnJlbnRGYm8oMCkKKyAgICAsIG1fZGVwdGhC
dWZmZXIoMCkKKyAgICAsIG1fdmFsaWQodHJ1ZSkKK3sKKyAgICBtX2F0dHJzLmFscGhhID0gdHJ1
ZTsKKyAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxz
ZTsKKyAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIG1fYXR0cnMucHJlbXVsdGlw
bGllZEFscGhhID0gdHJ1ZTsKKworICAgIFFHTEZvcm1hdCBmb3JtYXQ7CisKKyAgICBmb3JtYXQu
c2V0RGVwdGgodHJ1ZSk7CisgICAgZm9ybWF0LnNldFNhbXBsZUJ1ZmZlcnModHJ1ZSk7CisgICAg
Zm9ybWF0LnNldFN0ZW5jaWwoZmFsc2UpOworCisgICAgbV9nbFdpZGdldCA9IG5ldyBRR0xXaWRn
ZXQoZm9ybWF0KTsKKyAgICBpZiAoIW1fZ2xXaWRnZXQtPmlzVmFsaWQoKSkgeworICAgICAgICBx
V2FybmluZygiR3JhcGhpY3NDb250ZXh0M0Q6IFFHTFdpZGdldCBkb2VzIG5vdCBoYXZlIGEgdmFs
aWQgY29udGV4dCIpOworICAgICAgICBtX3ZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgY29uc3QgUUdM
Q29udGV4dCogY3R4ID0gbV9nbFdpZGdldC0+Y29udGV4dCgpOworCisjaWYgIWRlZmluZWQgKFFU
X09QRU5HTF9FU18yKSAKKyAgICBhY3RpdmVUZXh0dXJlID0gcmVpbnRlcnByZXRfY2FzdDxnbEFj
dGl2ZVRleHR1cmVUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEFjdGl2ZVRleHR1cmUiKSk7
CisgICAgYXR0YWNoU2hhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbEF0dGFjaFNoYWRlclR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQXR0YWNoU2hhZGVyIikpOworICAgIGJpbmRBdHRyaWJM
b2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCaW5kQXR0cmliTG9jYXRpb25UeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbEJpbmRBdHRyaWJMb2NhdGlvbiIpKTsKKyAgICBiaW5kQnVmZmVy
ID0gcmVpbnRlcnByZXRfY2FzdDxnbEJpbmRCdWZmZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgs
ICJnbEJpbmRCdWZmZXIiKSk7CisgICAgYmluZEZyYW1lYnVmZmVyID0gcmVpbnRlcnByZXRfY2Fz
dDxnbEJpbmRGcmFtZWJ1ZmZlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQmluZEZyYW1l
YnVmZmVyIikpOworICAgIGJpbmRSZW5kZXJidWZmZXIgPSByZWludGVycHJldF9jYXN0PGdsQmlu
ZFJlbmRlcmJ1ZmZlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQmluZFJlbmRlcmJ1ZmZl
ciIpKTsKKyAgICBibGVuZENvbG9yID0gcmVpbnRlcnByZXRfY2FzdDxnbEJsZW5kQ29sb3JUeXBl
PihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJsZW5kQ29sb3IiKSk7CisgICAgYmxlbmRFcXVhdGlv
blNlcGFyYXRlID0gcmVpbnRlcnByZXRfY2FzdDxnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZVR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQmxlbmRFcXVhdGlvblNlcGFyYXRlIikpOworICAgIGJs
ZW5kRnVuY1NlcGFyYXRlID0gcmVpbnRlcnByZXRfY2FzdDxnbEJsZW5kRnVuY1NlcGFyYXRlVHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCbGVuZEZ1bmNTZXBhcmF0ZSIpKTsKKyAgICBidWZm
ZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxnbEJ1ZmZlckRhdGFUeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbEJ1ZmZlckRhdGEiKSk7CisgICAgYnVmZmVyU3ViRGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xCdWZmZXJTdWJEYXRhVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCdWZmZXJT
dWJEYXRhIikpOworICAgIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMgPSByZWludGVycHJldF9jYXN0
PGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyIpKTsKKyAgICBjb21waWxlU2hhZGVyID0gcmVpbnRlcnByZXRf
Y2FzdDxnbENvbXBpbGVTaGFkZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbENvbXBpbGVT
aGFkZXIiKSk7CisgICAgY3JlYXRlUHJvZ3JhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xDcmVhdGVQ
cm9ncmFtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xDcmVhdGVQcm9ncmFtIikpOworICAg
IGNyZWF0ZVNoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xDcmVhdGVTaGFkZXJUeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbENyZWF0ZVNoYWRlciIpKTsKKyAgICBkZWxldGVCdWZmZXJzID0g
cmVpbnRlcnByZXRfY2FzdDxnbERlbGV0ZUJ1ZmZlcnNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgs
ICJnbERlbGV0ZUJ1ZmZlcnMiKSk7CisgICAgZGVsZXRlRnJhbWVidWZmZXJzID0gcmVpbnRlcnBy
ZXRfY2FzdDxnbERlbGV0ZUZyYW1lYnVmZmVyc1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
RGVsZXRlRnJhbWVidWZmZXJzIikpOworICAgIGRlbGV0ZVByb2dyYW0gPSByZWludGVycHJldF9j
YXN0PGdsRGVsZXRlUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsRGVsZXRlUHJv
Z3JhbSIpKTsKKyAgICBkZWxldGVSZW5kZXJidWZmZXJzID0gcmVpbnRlcnByZXRfY2FzdDxnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnMiKSk7CisgICAgZGVsZXRlU2hhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbERlbGV0
ZVNoYWRlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsRGVsZXRlU2hhZGVyIikpOworICAg
IGRldGFjaFNoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZXRhY2hTaGFkZXJUeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbERldGFjaFNoYWRlciIpKTsKKyAgICBkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkgPSByZWludGVycHJldF9jYXN0PGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5VHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiKSk7Cisg
ICAgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkgPSByZWludGVycHJldF9jYXN0PGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXlUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5IikpOworICAgIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyID0gcmVpbnRlcnByZXRf
Y2FzdDxnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAi
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIpKTsKKyAgICBmcmFtZWJ1ZmZlclRleHR1cmUyRCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRFR5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsRnJhbWVidWZmZXJUZXh0dXJlMkQiKSk7CisgICAgZ2VuQnVmZmVycyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xHZW5CdWZmZXJzVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xH
ZW5CdWZmZXJzIikpOworICAgIGdlbmVyYXRlTWlwbWFwID0gcmVpbnRlcnByZXRfY2FzdDxnbEdl
bmVyYXRlTWlwbWFwVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZW5lcmF0ZU1pcG1hcCIp
KTsKKyAgICBnZW5GcmFtZWJ1ZmZlcnMgPSByZWludGVycHJldF9jYXN0PGdsR2VuRnJhbWVidWZm
ZXJzVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZW5GcmFtZWJ1ZmZlcnMiKSk7CisgICAg
Z2VuUmVuZGVyYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZW5SZW5kZXJidWZmZXJzVHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZW5SZW5kZXJidWZmZXJzIikpOworICAgIGdldEFj
dGl2ZUF0dHJpYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRBY3RpdmVBdHRyaWJUeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbEdldEFjdGl2ZUF0dHJpYiIpKTsKKyAgICBnZXRBY3RpdmVVbmlm
b3JtID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldEFjdGl2ZVVuaWZvcm1UeXBlPihnZXRQcm9jQWRk
cmVzcyhjdHgsICJnbEdldEFjdGl2ZVVuaWZvcm0iKSk7CisgICAgZ2V0QXR0cmliTG9jYXRpb24g
PSByZWludGVycHJldF9jYXN0PGdsR2V0QXR0cmliTG9jYXRpb25UeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbEdldEF0dHJpYkxvY2F0aW9uIikpOworICAgIGdldEJ1ZmZlclBhcmFtZXRlcml2
ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldEJ1ZmZlclBhcmFtZXRlcml2VHlwZT4oZ2V0UHJvY0Fk
ZHJlc3MoY3R4LCAiZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdiIpKTsKKyAgICBnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYiKSk7CisgICAgZ2V0UHJvZ3JhbUluZm9Mb2cg
PSByZWludGVycHJldF9jYXN0PGdsR2V0UHJvZ3JhbUluZm9Mb2dUeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbEdldFByb2dyYW1JbmZvTG9nIikpOworICAgIGdldFByb2dyYW1pdiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xHZXRQcm9ncmFtaXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdl
dFByb2dyYW1pdiIpKTsKKyAgICBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYiKSk7CisgICAgZ2V0U2hhZGVySW5m
b0xvZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRTaGFkZXJJbmZvTG9nVHlwZT4oZ2V0UHJvY0Fk
ZHJlc3MoY3R4LCAiZ2xHZXRTaGFkZXJJbmZvTG9nIikpOworICAgIGdldFNoYWRlcml2ID0gcmVp
bnRlcnByZXRfY2FzdDxnbEdldFNoYWRlcml2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xH
ZXRTaGFkZXJpdiIpKTsKKyAgICBnZXRTaGFkZXJTb3VyY2UgPSByZWludGVycHJldF9jYXN0PGds
R2V0U2hhZGVyU291cmNlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRTaGFkZXJTb3Vy
Y2UiKSk7CisgICAgZ2V0VW5pZm9ybWZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFVuaWZvcm1m
dlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0VW5pZm9ybWZ2IikpOworICAgIGdldFVu
aWZvcm1pdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRVbmlmb3JtaXZUeXBlPihnZXRQcm9jQWRk
cmVzcyhjdHgsICJnbEdldFVuaWZvcm1pdiIpKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24gPSBy
ZWludGVycHJldF9jYXN0PGdsR2V0VW5pZm9ybUxvY2F0aW9uVHlwZT4oZ2V0UHJvY0FkZHJlc3Mo
Y3R4LCAiZ2xHZXRVbmlmb3JtTG9jYXRpb24iKSk7CisgICAgZ2V0VmVydGV4QXR0cmliZnYgPSBy
ZWludGVycHJldF9jYXN0PGdsR2V0VmVydGV4QXR0cmliZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhj
dHgsICJnbEdldFZlcnRleEF0dHJpYmZ2IikpOworICAgIGdldFZlcnRleEF0dHJpYml2ID0gcmVp
bnRlcnByZXRfY2FzdDxnbEdldFZlcnRleEF0dHJpYml2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xHZXRWZXJ0ZXhBdHRyaWJpdiIpKTsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJQb2ludGVydiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydlR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYiKSk7CisgICAgaXNCdWZmZXIg
PSByZWludGVycHJldF9jYXN0PGdsSXNCdWZmZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJn
bElzQnVmZmVyIikpOworICAgIGlzRnJhbWVidWZmZXIgPSByZWludGVycHJldF9jYXN0PGdsSXNG
cmFtZWJ1ZmZlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsSXNGcmFtZWJ1ZmZlciIpKTsK
KyAgICBpc1Byb2dyYW0gPSByZWludGVycHJldF9jYXN0PGdsSXNQcm9ncmFtVHlwZT4oZ2V0UHJv
Y0FkZHJlc3MoY3R4LCAiZ2xJc1Byb2dyYW0iKSk7CisgICAgaXNSZW5kZXJidWZmZXIgPSByZWlu
dGVycHJldF9jYXN0PGdsSXNSZW5kZXJidWZmZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJn
bElzUmVuZGVyYnVmZmVyIikpOworICAgIGlzU2hhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbElz
U2hhZGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xJc1NoYWRlciIpKTsKKyAgICBsaW5r
UHJvZ3JhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xMaW5rUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsTGlua1Byb2dyYW0iKSk7CisgICAgcmVuZGVyYnVmZmVyU3RvcmFnZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xSZW5kZXJidWZmZXJTdG9yYWdlVHlwZT4oZ2V0UHJvY0FkZHJlc3Mo
Y3R4LCAiZ2xSZW5kZXJidWZmZXJTdG9yYWdlIikpOworICAgIHNoYWRlclNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xTaGFkZXJTb3VyY2VUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFNo
YWRlclNvdXJjZSIpKTsKKyAgICBzdGVuY2lsRnVuY1NlcGFyYXRlID0gcmVpbnRlcnByZXRfY2Fz
dDxnbFN0ZW5jaWxGdW5jU2VwYXJhdGVUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFN0ZW5j
aWxGdW5jU2VwYXJhdGUiKSk7CisgICAgc3RlbmNpbE1hc2tTZXBhcmF0ZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xTdGVuY2lsTWFza1NlcGFyYXRlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xT
dGVuY2lsTWFza1NlcGFyYXRlIikpOworICAgIHN0ZW5jaWxPcFNlcGFyYXRlID0gcmVpbnRlcnBy
ZXRfY2FzdDxnbFN0ZW5jaWxPcFNlcGFyYXRlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xT
dGVuY2lsT3BTZXBhcmF0ZSIpKTsKKyAgICB1bmlmb3JtMWYgPSByZWludGVycHJldF9jYXN0PGds
VW5pZm9ybTFmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMWYiKSk7CisgICAg
dW5pZm9ybTFmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtMWZ2VHlwZT4oZ2V0UHJvY0Fk
ZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMWZ2IikpOworICAgIHVuaWZvcm0xaSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xVbmlmb3JtMWlUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0xaSIp
KTsKKyAgICB1bmlmb3JtMWl2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0xaXZUeXBlPihn
ZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0xaXYiKSk7CisgICAgdW5pZm9ybTJmID0gcmVp
bnRlcnByZXRfY2FzdDxnbFVuaWZvcm0yZlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5p
Zm9ybTJmIikpOworICAgIHVuaWZvcm0yZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTJm
dlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTJmdiIpKTsKKyAgICB1bmlmb3Jt
MmkgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTJpVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xVbmlmb3JtMmkiKSk7CisgICAgdW5pZm9ybTJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xV
bmlmb3JtMml2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMml2IikpOworICAg
IHVuaWZvcm0zZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtM2ZUeXBlPihnZXRQcm9jQWRk
cmVzcyhjdHgsICJnbFVuaWZvcm0zZiIpKTsKKyAgICB1bmlmb3JtM2Z2ID0gcmVpbnRlcnByZXRf
Y2FzdDxnbFVuaWZvcm0zZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0zZnYi
KSk7CisgICAgdW5pZm9ybTNpID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0zaVR5cGU+KGdl
dFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTNpIikpOworICAgIHVuaWZvcm0zaXYgPSByZWlu
dGVycHJldF9jYXN0PGdsVW5pZm9ybTNpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5p
Zm9ybTNpdiIpKTsKKyAgICB1bmlmb3JtNGYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTRm
VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtNGYiKSk7CisgICAgdW5pZm9ybTRm
diA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtNGZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xVbmlmb3JtNGZ2IikpOworICAgIHVuaWZvcm00aSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xV
bmlmb3JtNGlUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm00aSIpKTsKKyAgICB1
bmlmb3JtNGl2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm00aXZUeXBlPihnZXRQcm9jQWRk
cmVzcyhjdHgsICJnbFVuaWZvcm00aXYiKSk7CisgICAgdW5pZm9ybU1hdHJpeDJmdiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtTWF0cml4MmZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAi
Z2xVbmlmb3JtTWF0cml4MmZ2IikpOworICAgIHVuaWZvcm1NYXRyaXgzZnYgPSByZWludGVycHJl
dF9jYXN0PGdsVW5pZm9ybU1hdHJpeDNmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5p
Zm9ybU1hdHJpeDNmdiIpKTsKKyAgICB1bmlmb3JtTWF0cml4NGZ2ID0gcmVpbnRlcnByZXRfY2Fz
dDxnbFVuaWZvcm1NYXRyaXg0ZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm1N
YXRyaXg0ZnYiKSk7CisgICAgdXNlUHJvZ3JhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVc2VQcm9n
cmFtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVc2VQcm9ncmFtIikpOworICAgIHZhbGlk
YXRlUHJvZ3JhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWYWxpZGF0ZVByb2dyYW1UeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbFZhbGlkYXRlUHJvZ3JhbSIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWIx
ZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRyaWIxZlR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsVmVydGV4QXR0cmliMWYiKSk7CisgICAgdmVydGV4QXR0cmliMWZ2ID0gcmVpbnRl
cnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjFmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
VmVydGV4QXR0cmliMWZ2IikpOworICAgIHZlcnRleEF0dHJpYjJmID0gcmVpbnRlcnByZXRfY2Fz
dDxnbFZlcnRleEF0dHJpYjJmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xWZXJ0ZXhBdHRy
aWIyZiIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWIyZnYgPSByZWludGVycHJldF9jYXN0PGdsVmVydGV4
QXR0cmliMmZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xWZXJ0ZXhBdHRyaWIyZnYiKSk7
CisgICAgdmVydGV4QXR0cmliM2YgPSByZWludGVycHJldF9jYXN0PGdsVmVydGV4QXR0cmliM2ZU
eXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjNmIikpOworICAgIHZlcnRl
eEF0dHJpYjNmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRyaWIzZnZUeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjNmdiIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWI0
ZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRyaWI0ZlR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsVmVydGV4QXR0cmliNGYiKSk7CisgICAgdmVydGV4QXR0cmliNGZ2ID0gcmVpbnRl
cnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjRmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
VmVydGV4QXR0cmliNGZ2IikpOworICAgIHZlcnRleEF0dHJpYlBvaW50ZXIgPSByZWludGVycHJl
dF9jYXN0PGdsVmVydGV4QXR0cmliUG9pbnRlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
VmVydGV4QXR0cmliUG9pbnRlciIpKTsKKyNlbHNlCisgICAgYWN0aXZlVGV4dHVyZSA9IGdsQWN0
aXZlVGV4dHVyZTsKKyAgICBhdHRhY2hTaGFkZXIgPSBnbEF0dGFjaFNoYWRlcjsKKyAgICBiaW5k
QXR0cmliTG9jYXRpb24gPSBnbEJpbmRBdHRyaWJMb2NhdGlvbjsKKyAgICBiaW5kQnVmZmVyID0g
Z2xCaW5kQnVmZmVyOworICAgIGJpbmRGcmFtZWJ1ZmZlciA9IGdsQmluZEZyYW1lYnVmZmVyOwor
ICAgIGJpbmRSZW5kZXJidWZmZXIgPSBnbEJpbmRSZW5kZXJidWZmZXI7CisgICAgYmxlbmRDb2xv
ciA9IGdsQmxlbmRDb2xvcjsKKyAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUgPSBnbEJsZW5kRXF1
YXRpb25TZXBhcmF0ZTsKKyAgICBibGVuZEZ1bmNTZXBhcmF0ZSA9IGdsQmxlbmRGdW5jU2VwYXJh
dGU7CisgICAgYnVmZmVyRGF0YSA9IGdsQnVmZmVyRGF0YTsKKyAgICBidWZmZXJTdWJEYXRhID0g
Z2xCdWZmZXJTdWJEYXRhOworICAgIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMgPSBnbENoZWNrRnJh
bWVidWZmZXJTdGF0dXM7CisgICAgY29tcGlsZVNoYWRlciA9IGdsQ29tcGlsZVNoYWRlcjsKKyAg
ICBjcmVhdGVQcm9ncmFtID0gZ2xDcmVhdGVQcm9ncmFtOworICAgIGNyZWF0ZVNoYWRlciA9IGds
Q3JlYXRlU2hhZGVyOworICAgIGRlbGV0ZUJ1ZmZlcnMgPSBnbERlbGV0ZUJ1ZmZlcnM7CisgICAg
ZGVsZXRlRnJhbWVidWZmZXJzID0gZ2xEZWxldGVGcmFtZWJ1ZmZlcnM7CisgICAgZGVsZXRlUHJv
Z3JhbSA9IGdsRGVsZXRlUHJvZ3JhbTsKKyAgICBkZWxldGVSZW5kZXJidWZmZXJzID0gZ2xEZWxl
dGVSZW5kZXJidWZmZXJzOworICAgIGRlbGV0ZVNoYWRlciA9IGdsRGVsZXRlU2hhZGVyOworICAg
IGRldGFjaFNoYWRlciA9IGdsRGV0YWNoU2hhZGVyOworICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheSA9IGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5OworICAgIGVuYWJsZVZlcnRleEF0dHJp
YkFycmF5ID0gZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciA9IGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXI7CisgICAgZnJhbWVidWZmZXJUZXh0
dXJlMkQgPSBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEOworICAgIGdlbkJ1ZmZlcnMgPSBnbEdlbkJ1
ZmZlcnM7CisgICAgZ2VuZXJhdGVNaXBtYXAgPSBnbEdlbmVyYXRlTWlwbWFwOworICAgIGdlbkZy
YW1lYnVmZmVycyA9IGdsR2VuRnJhbWVidWZmZXJzOworICAgIGdlblJlbmRlcmJ1ZmZlcnMgPSBn
bEdlblJlbmRlcmJ1ZmZlcnM7CisgICAgZ2V0QWN0aXZlQXR0cmliID0gZ2xHZXRBY3RpdmVBdHRy
aWI7CisgICAgZ2V0QWN0aXZlVW5pZm9ybSA9IGdsR2V0QWN0aXZlVW5pZm9ybTsKKyAgICBnZXRB
dHRyaWJMb2NhdGlvbiA9IGdsR2V0QXR0cmliTG9jYXRpb247CisgICAgZ2V0QnVmZmVyUGFyYW1l
dGVyaXYgPSBnbEdldEJ1ZmZlclBhcmFtZXRlcml2OworICAgIGdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2ID0gZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdjsK
KyAgICBnZXRQcm9ncmFtSW5mb0xvZyA9IGdsR2V0UHJvZ3JhbUluZm9Mb2c7CisgICAgZ2V0UHJv
Z3JhbWl2ID0gZ2xHZXRQcm9ncmFtaXY7CisgICAgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYg
PSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2OworICAgIGdldFNoYWRlckluZm9Mb2cgPSBn
bEdldFNoYWRlckluZm9Mb2c7CisgICAgZ2V0U2hhZGVyaXYgPSBnbEdldFNoYWRlcml2OworICAg
IGdldFNoYWRlclNvdXJjZSA9IGdsR2V0U2hhZGVyU291cmNlOworICAgIGdldFVuaWZvcm1mdiA9
IGdsR2V0VW5pZm9ybWZ2OworICAgIGdldFVuaWZvcm1pdiA9IGdsR2V0VW5pZm9ybWl2OworICAg
IGdldFVuaWZvcm1Mb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uOworICAgIGdldFZlcnRl
eEF0dHJpYmZ2ID0gZ2xHZXRWZXJ0ZXhBdHRyaWJmdjsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJpdiA9
IGdsR2V0VmVydGV4QXR0cmliaXY7CisgICAgZ2V0VmVydGV4QXR0cmliUG9pbnRlcnYgPSBnbEdl
dFZlcnRleEF0dHJpYlBvaW50ZXJ2OworICAgIGlzQnVmZmVyID0gZ2xJc0J1ZmZlcjsKKyAgICBp
c0ZyYW1lYnVmZmVyID0gZ2xJc0ZyYW1lYnVmZmVyOworICAgIGlzUHJvZ3JhbSA9IGdsSXNQcm9n
cmFtOworICAgIGlzUmVuZGVyYnVmZmVyID0gZ2xJc1JlbmRlcmJ1ZmZlcjsKKyAgICBpc1NoYWRl
ciA9IGdsSXNTaGFkZXI7CisgICAgbGlua1Byb2dyYW0gPSBnbExpbmtQcm9ncmFtOworICAgIHJl
bmRlcmJ1ZmZlclN0b3JhZ2UgPSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2U7CisgICAgc2hhZGVyU291
cmNlID0gZ2xTaGFkZXJTb3VyY2U7CisgICAgc3RlbmNpbEZ1bmNTZXBhcmF0ZSA9IGdsU3RlbmNp
bEZ1bmNTZXBhcmF0ZTsKKyAgICBzdGVuY2lsTWFza1NlcGFyYXRlID0gZ2xTdGVuY2lsTWFza1Nl
cGFyYXRlOworICAgIHN0ZW5jaWxPcFNlcGFyYXRlID0gZ2xTdGVuY2lsT3BTZXBhcmF0ZTsKKyAg
ICB1bmlmb3JtMWYgPSBnbFVuaWZvcm0xZjsKKyAgICB1bmlmb3JtMWZ2ID0gZ2xVbmlmb3JtMWZ2
OworICAgIHVuaWZvcm0xaSA9IGdsVW5pZm9ybTFpOworICAgIHVuaWZvcm0xaXYgPSBnbFVuaWZv
cm0xaXY7CisgICAgdW5pZm9ybTJmID0gZ2xVbmlmb3JtMmY7CisgICAgdW5pZm9ybTJmdiA9IGds
VW5pZm9ybTJmdjsKKyAgICB1bmlmb3JtMmkgPSBnbFVuaWZvcm0yaTsKKyAgICB1bmlmb3JtMml2
ID0gZ2xVbmlmb3JtMml2OworICAgIHVuaWZvcm0zZiA9IGdsVW5pZm9ybTNmOworICAgIHVuaWZv
cm0zZnYgPSBnbFVuaWZvcm0zZnY7CisgICAgdW5pZm9ybTNpID0gZ2xVbmlmb3JtM2k7CisgICAg
dW5pZm9ybTNpdiA9IGdsVW5pZm9ybTNpdjsKKyAgICB1bmlmb3JtNGYgPSBnbFVuaWZvcm00ZjsK
KyAgICB1bmlmb3JtNGZ2ID0gZ2xVbmlmb3JtNGZ2OworICAgIHVuaWZvcm00aSA9IGdsVW5pZm9y
bTRpOworICAgIHVuaWZvcm00aXYgPSBnbFVuaWZvcm00aXY7CisgICAgdW5pZm9ybU1hdHJpeDJm
diA9IGdsVW5pZm9ybU1hdHJpeDJmdjsKKyAgICB1bmlmb3JtTWF0cml4M2Z2ID0gZ2xVbmlmb3Jt
TWF0cml4M2Z2OworICAgIHVuaWZvcm1NYXRyaXg0ZnYgPSBnbFVuaWZvcm1NYXRyaXg0ZnY7Cisg
ICAgdXNlUHJvZ3JhbSA9IGdsVXNlUHJvZ3JhbTsKKyAgICB2YWxpZGF0ZVByb2dyYW0gPSBnbFZh
bGlkYXRlUHJvZ3JhbTsKKyAgICB2ZXJ0ZXhBdHRyaWIxZiA9IGdsVmVydGV4QXR0cmliMWY7Cisg
ICAgdmVydGV4QXR0cmliMWZ2ID0gZ2xWZXJ0ZXhBdHRyaWIxZnY7CisgICAgdmVydGV4QXR0cmli
MmYgPSBnbFZlcnRleEF0dHJpYjJmOworICAgIHZlcnRleEF0dHJpYjJmdiA9IGdsVmVydGV4QXR0
cmliMmZ2OworICAgIHZlcnRleEF0dHJpYjNmID0gZ2xWZXJ0ZXhBdHRyaWIzZjsKKyAgICB2ZXJ0
ZXhBdHRyaWIzZnYgPSBnbFZlcnRleEF0dHJpYjNmdjsKKyAgICB2ZXJ0ZXhBdHRyaWI0ZiA9IGds
VmVydGV4QXR0cmliNGY7CisgICAgdmVydGV4QXR0cmliNGZ2ID0gZ2xWZXJ0ZXhBdHRyaWI0ZnY7
CisgICAgdmVydGV4QXR0cmliUG9pbnRlciA9IGdsVmVydGV4QXR0cmliUG9pbnRlcjsKKyNlbmRp
ZgorCisgICAgaWYgKCFtX3ZhbGlkKSB7CisgICAgICAgIHFXYXJuaW5nKCJHcmFwaGljc0NvbnRl
eHQzRDogQWxsIG5lZWRlZCBPcGVuR0wgZXh0ZW5zaW9ucyBhcmUgbm90IGF2YWlsYWJsZSIpOwor
ICAgICAgICBtX3ZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBn
bEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19F
REdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LCBHTF9SR0JBLCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworCisgICAgZ2VuRnJhbWVidWZmZXJzKDEs
ICZtX21haW5GYm8pOworICAgIG1fY3VycmVudEZibyA9IG1fbWFpbkZibzsKKworICAgIGJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbWFpbkZibyk7CisK
KyAgICBnZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICBiaW5kUmVuZGVy
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwor
I2lmZGVmIEdMX0RFUFRIX0NPTVBPTkVOVDI0CisgICAgcmVuZGVyYnVmZmVyU3RvcmFnZShHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9ERVBUSF9DT01QT05FTlQyNCwgMSwgMSk7
CisjZWxzZQorICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIDEsIDEpOworI2VuZGlmCisKKyAgICBiaW5k
UmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworIAorICAg
IGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1
cmUsIDApOworICAgIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAgIGdsQ2xlYXJDb2xv
cigwLCAwLCAwLCAwKTsKKworICAgIGlmIChjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4dDNEOiBJ
bnZhbGlkIEZCTyIgPDwgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIpOworICAgICAgICBtX3ZhbGlkID0gZmFsc2U7CisgICAgfQorfQorCitHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpCit7Cisg
ICAgZGVsZXRlIG1fZ2xXaWRnZXQ7CisgICAgbV9nbFdpZGdldCA9IDA7Cit9CisKK3ZvaWQqIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFByb2NBZGRyZXNzKGNvbnN0IFFHTENvbnRleHQq
IGN0eCwgY29uc3QgUVN0cmluZyYgcHJvYykKK3sKKyAgICBRU3RyaW5nIGV4dFszXSA9IHsgIiIs
ICJBUkIiLCAiRVhUIiB9OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAg
ICAgICAgdm9pZCogYWRkciA9IGN0eC0+Z2V0UHJvY0FkZHJlc3MoUUxhdGluMVN0cmluZygocHJv
YyArIGV4dFtpXSkudG9MYXRpbjEoKSkpOworICAgICAgICBpZiAoYWRkcikgCisgICAgICAgICAg
ICByZXR1cm4gYWRkcjsKKyAgICB9CisKKyAgICBxV2FybmluZygpIDw8ICJHcmFwaGljc0NvbnRl
eHQzRDogbm90IGZvdW5kIiA8PCBwcm9jOworCisgICAgbV92YWxpZCA9IGZhbHNlOworICAgIHJl
dHVybiAwOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQoreworICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChuZXcgR3JhcGhpY3NDb250ZXh0M0Qo
YXR0cnMpKTsKKyAgICByZXR1cm4gY29udGV4dC0+bV9pbnRlcm5hbCA/IGNvbnRleHQucmVsZWFz
ZSgpIDogMDsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQorICAgIDogbV9pbnRlcm5hbChuZXcgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbChhdHRycykpCit7CisgICAgaWYgKCFtX2ludGVybmFsLT5p
c1ZhbGlkKCkpIAorICAgICAgICBtX2ludGVybmFsID0gMDsKK30KKworR3JhcGhpY3NDb250ZXh0
M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCit7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKQoreworICAg
IHJldHVybiBtX2ludGVybmFsLT5tX2dsV2lkZ2V0OworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVybiBt
X2ludGVybmFsLT5tX3RleHR1cmU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VD
b250ZXh0Q3VycmVudCgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKworICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5j
YW52YXMoKTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigp
OworCisgICAgbV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgbV9pbnRlcm5hbC0+bV9tYWluRmJvKTsKKworICAgIGdsUmVhZFBpeGVscygw
LCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBtX2ludGVybmFsLT5tX3BpeGVscy5iaXRzKCkpOworCisgICAgUVBhaW50ZXIqIHAg
PSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBwLT5kcmF3
SW1hZ2UoMCwgMCwgbV9pbnRlcm5hbC0+bV9waXhlbHMudHJhbnNmb3JtZWQoUU1hdHJpeCgpLnJv
dGF0ZSgxODApKSk7CisKKyAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ludGVybmFsLT5tX2N1cnJlbnRGYm8pOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICgoKHdp
ZHRoID09IG1fY3VycmVudFdpZHRoKSAmJiAoaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkpIHx8
ICghbV9pbnRlcm5hbCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRXaWR0
aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIG1faW50ZXJu
YWwtPm1fcGl4ZWxzID0gUUltYWdlKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIFFJ
bWFnZTo6Rm9ybWF0X0FSR0IzMik7CisKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybmFs
LT5tX3RleHR1cmUpOworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JB
LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgCisgICAgbV9pbnRlcm5hbC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9pbnRlcm5hbC0+
bV9tYWluRmJvKTsKKyAgICBtX2ludGVybmFsLT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1faW50ZXJuYWwtPm1fZGVwdGhCdWZmZXIpOworI2lmZGVm
IEdMX0RFUFRIX0NPTVBPTkVOVDI0CisgICAgcmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9ERVBUSF9DT01QT05FTlQyNCwgd2lkdGgsIGhlaWdo
dCk7CisjZWxzZQorICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworI2VuZGlm
CisgICAgbV9pbnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCAwKTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm5hbC0+bV90ZXh0dXJlLCAwKTsK
KyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2ludGVybmFsLT5tX2RlcHRoQnVmZmVyKTsK
KworICAgIEdMZW51bSBzdGF0dXMgPSBtX2ludGVybmFsLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUik7CisgICAgaWYgKHN0YXR1cyAhPSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgcVdhcm5pbmco
KSA8PCAiR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGU6IEludmFsaWQgRkJPIiA8PCBjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUik7CisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJf
QklUKTsKKyAgICBnbEZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2
ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBB
U1NFUlQoc2hhZGVyKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIG1faW50ZXJuYWwtPmF0dGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3Qo
KSwgKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT5iaW5kQXR0cmliTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIGluZGV4LCBu
YW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVm
ZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Ymlu
ZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5tX2N1cnJlbnRGYm8g
PSAoYnVmZmVyICYmIGJ1ZmZlci0+b2JqZWN0KCkpID8gKEdMdWludCkgYnVmZmVyLT5vYmplY3Qo
KSA6IG1faW50ZXJuYWwtPm1fbWFpbkZibzsKKyAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZm
ZXIodGFyZ2V0LCBtX2ludGVybmFsLT5tX2N1cnJlbnRGYm8pOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFJl
bmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQs
IHJlbmRlcmJ1ZmZlciA/IChHTHVpbnQpIHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlID8gKEdM
dWludCkgdGV4dHVyZS0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3Vi
bGUgYWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBnbEJsZW5kQ29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlZCksIHN0YXRpY19jYXN0PGZs
b2F0PihncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0PihibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGFscGhhKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24odW5z
aWduZWQgbG9uZyBtb2RlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgZ2xCbGVuZEVxdWF0aW9uKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNp
Z25lZCBsb25nIG1vZGVBbHBoYSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdC
LCBtb2RlQWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmModW5z
aWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEJsZW5kRnVuYyhzZmFjdG9y
LCBkZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVu
Y1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5z
aWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJsZW5k
RnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBp
bnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGEodGFyZ2V0LCBz
aXplLCAwLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBsb25nIHVz
YWdlKQoreworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9pbnRlcm5hbC0+YnVmZmVyRGF0YSh0YXJnZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCksIGFy
cmF5LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBXZWJHTEFy
cmF5KiBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5
LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpKTsKK30KKwordW5zaWduZWQgbG9u
ZyBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25n
IHRhcmdldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIHJldHVybiBtX2ludGVybmFsLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJsZSBn
LCBkb3VibGUgYiwgZG91YmxlIGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBnbENsZWFyQ29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KHIpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oZyksIHN0YXRpY19jYXN0PGZsb2F0PihiKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGEpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIodW5zaWduZWQgbG9u
ZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xDbGVhcihtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0
aChkb3VibGUgZGVwdGgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIGdsQ2xlYXJEZXB0aGYoZGVw
dGgpOworI2Vsc2UKKyAgICBnbENsZWFyRGVwdGgoZGVwdGgpOworI2VuZGlmCit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChsb25nIHMpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENsZWFyU3RlbmNpbChzKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVu
LCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIq
IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmNvbXBpbGVTaGFkZXIoKEdMdWlu
dCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlU
ZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25n
IGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcg
eSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENvcHlUZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1v
ZGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bEN1bGxGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMo
dW5zaWduZWQgbG9uZyBmdW5jKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgZ2xEZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlcHRoTWFzayhib29sIGZsYWcpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERlcHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShkb3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisjaWYgZGVmaW5lZChR
VF9PUEVOR0xfRVNfMikKKyAgICBnbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFyKTsKKyNlbHNlCisg
ICAgZ2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRl
ciogc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJu
YWwtPmRldGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgKEdMdWludCkgc2hh
ZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUodW5z
aWduZWQgbG9uZyBjYXApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBnbERpc2FibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRHJh
d0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1
bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5
cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQp
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZSh1bnNpZ25lZCBsb25nIGNh
cCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGds
RW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEZpbmlzaCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEZsdXNoKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVm
ZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZl
ciA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSwgbG9uZyBsZXZlbCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdl
dCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlID8gKEdMdWludCkgdGV4dHVyZS0+b2Jq
ZWN0KCkgOiAwLCBsZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFj
ZSh1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBnbEZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5nZW5l
cmF0ZU1pcG1hcCh0YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3Rp
dmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbS0+b2JqZWN0KCkpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisg
ICAgR0xpbnQgbWF4TGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFByb2dyYW1pdihzdGF0aWNf
Y2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhf
TEVOR1RILCAmbWF4TGVuZ3RoKTsKKworICAgIEdMY2hhciBuYW1lW21heExlbmd0aF07IAorICAg
IEdMc2l6ZWkgbmFtZUxlbmd0aDsKKyAgICBHTGludCBzaXplOworICAgIEdMZW51bSB0eXBlOwor
CisgICAgbV9pbnRlcm5hbC0+Z2V0QWN0aXZlQXR0cmliKHN0YXRpY19jYXN0PEdMdWludD4ocHJv
Z3JhbS0+b2JqZWN0KCkpLCBpbmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0
eXBlLCBuYW1lKTsKKworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8u
dHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKworICAgIHJldHVybiB0cnVlOwor
fQorICAgIAorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7
CisgICAgaWYgKCFwcm9ncmFtLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBHTGludCBtYXhMZW5n
dGg7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJv
Z3JhbS0+b2JqZWN0KCkpLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4TGVuZ3Ro
KTsKKworICAgIEdMY2hhciBuYW1lW21heExlbmd0aF07CisgICAgR0xzaXplaSBuYW1lTGVuZ3Ro
OworICAgIEdMaW50IHNpemU7CisgICAgR0xlbnVtIHR5cGU7CisKKyAgICBtX2ludGVybmFsLT5n
ZXRBY3RpdmVVbmlmb3JtKHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0KCkpLCBp
bmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKworICAg
IGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5mby5uYW1l
ID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAg
aW5mby5zaXplID0gc2l6ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0
dXJuIG1faW50ZXJuYWwtPmdldEF0dHJpYkxvY2F0aW9uKChHTHVpbnQpIHByb2dyYW0tPm9iamVj
dCgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQoreworICAgIHJl
dHVybiBtX2ludGVybmFsLT5tX2F0dHJzOworfQorCit1bnNpZ25lZCBsb25nIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1faW50ZXJuYWwtPm1fc3ludGhldGljRXJy
b3JzLnNpemUoKSA+IDApIHsKKyAgICAgICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOworICAg
ICAgICB1bnNpZ25lZCBsb25nIGVyciA9ICppdGVyOworICAgICAgICBtX2ludGVybmFsLT5tX3N5
bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQor
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4g
Z2xHZXRFcnJvcigpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyh1
bnNpZ25lZCBsb25nIG5hbWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICByZXR1cm4gU3RyaW5nKChjb25zdCBjaGFyKikgZ2xHZXRTdHJpbmcobmFt
ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAo
IWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzQnVmZmVy
KChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojppc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xJc0VuYWJsZWQoY2FwKTsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBm
cmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+aXNGcmFtZWJ1ZmZlcigoR0x1aW50KSBmcmFtZWJ1ZmZlci0+
b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3Qo
KSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVu
ZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5pc1JlbmRlcmJ1ZmZlcigoR0x1aW50
KSByZW5kZXJidWZmZXItPm9iamVjdCgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzU2hhZGVyKChHTHVpbnQpIHNoYWRl
ci0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUoV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgcmV0dXJuIGdsSXNUZXh0dXJlKChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKGRvdWJsZSB3aWR0aCkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsTGluZVdpZHRo
KHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dy
YW0pOworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+bGlua1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBs
b25nIHBhcmFtKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgZ2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cykKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsUG9seWdvbk9m
ZnNldChzdGF0aWNfY2FzdDxmbG9hdD4oZmFjdG9yKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHVuaXRz
KSk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQ
aXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgCisgICAgaWYgKHR5
cGUgIT0gR0xfVU5TSUdORURfQllURSB8fCBmb3JtYXQgIT0gR0xfUkdCQSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIAorICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBhcnJh
eSA9IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOwor
ICAgIGdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIChHTHZv
aWQqKSBhcnJheS0+ZGF0YSgpKTsKKyAgICByZXR1cm4gYXJyYXk7ICAgIAorfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5yZW5kZXJidWZmZXJTdG9yYWdlKHRh
cmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0KQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xTYW1wbGVD
b3ZlcmFnZShzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpLCBpbnZlcnQpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIGdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIAor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICAvLyBGb3Jj
ZSB0byBHTFNMIDEuMDoKKyAgICAvLyBodHRwczovL2N2cy5raHJvbm9zLm9yZy9zdm4vcmVwb3Mv
cmVnaXN0cnkvdHJ1bmsvcHVibGljL3dlYmdsL2RvYy9zcGVjL1dlYkdMLXNwZWMuaHRtbCM0LjQK
KyAgICAvLyBGSVhNRTogTGluZXMgYmVnaW5uaW5nIHdpdGggIiN2ZXJzaW9uIiBzaG91bGQgYmUg
c3RyaXBwZWQgb3V0LgorCisgICAgU3RyaW5nIHByZXBhcmVkOworICAgCisgICAgcHJlcGFyZWQu
YXBwZW5kKCIjdmVyc2lvbiAxMDBcbiIpOworI2lmZGVmIFFUX09QRU5HTF9FU18yCisgICAgcHJl
cGFyZWQuYXBwZW5kKCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIpOworI2VuZGlmCisgICAg
cHJlcGFyZWQuYXBwZW5kKHN0cmluZyk7CisKKyAgICBjb25zdCBDU3RyaW5nJiBjcyA9IHByZXBh
cmVkLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiBzID0gY3MuZGF0YSgpOworICAgIGludCBsZW5n
dGggPSBwcmVwYXJlZC5sZW5ndGgoKTsKKyAgICBtX2ludGVybmFsLT5zaGFkZXJTb3VyY2UoKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSwgMSwgJnMsICZsZW5ndGgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1
bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNl
LCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU3RlbmNpbE1h
c2sobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJh
dGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5zdGVuY2ls
TWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25l
ZCBsb25nIHpwYXNzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgZ2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNp
Z25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3Mp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgcG5hbWUsIGZsb2F0IHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHN0
YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0
ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCB2YWx1ZSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsVGV4
UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0
IHYwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+dW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9h
dCB2MSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPnVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogYXJyYXksIGlu
dCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YobG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAs
IGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2
Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlv
biwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zZnYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKGxvbmcg
bG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
dW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB2MCkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwt
PnVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5p
Zm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlm
b3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlm
b3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+dW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPnVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBp
bnQgdjIsIGludCB2MykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24s
IGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KGxv
bmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogYXJyYXksIGludCBzaXplKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRy
YW5zcG9zZSwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXg0ZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQo
cHJvZ3JhbSk7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT51c2VQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgCisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52YWxpZGF0
ZVByb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRl
cm5hbC0+dmVydGV4QXR0cmliMWYoaW5keCwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9h
dCB2MSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjJmKGluZHgsIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0
KiBhcnJheSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjJmdihpbmR4LCBhcnJheSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxv
YXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjNmKGluZHgsIHYw
LCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIzZnYo
aW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0
Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0
IHYzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+dmVydGV4QXR0cmliNGYoaW5keCwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxv
bmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGxv
bmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYlBvaW50
ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0
aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbFZpZXdwb3J0KHN0YXRpY19jYXN0PEdMaW50Pih4KSwgc3Rh
dGljX2Nhc3Q8R0xpbnQ+KHkpLCBzdGF0aWNfY2FzdDxHTHNpemVpPih3aWR0aCksIHN0YXRpY19j
YXN0PEdMc2l6ZWk+KGhlaWdodCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRC
b29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lLCB1bnNpZ25lZCBjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0Qm9vbGVh
bnYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVy
UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGlu
dCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25lZCBsb25n
IHBuYW1lLCBmbG9hdCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25n
IHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydih1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xH
ZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBp
bnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgp
LCBwbmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dy
YW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbGVuZ3RoOworICAgIG1faW50ZXJu
YWwtPmdldFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgR0xfSU5GT19MT0df
TEVOR1RILCAmbGVuZ3RoKTsKKworICAgIEdMc2l6ZWkgc2l6ZTsKKworICAgIEdMY2hhciogaW5m
byA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CisgICAgaWYgKCFpbmZvKQorICAgICAg
ICByZXR1cm4gIiI7CisKKyAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtSW5mb0xvZygoR0x1aW50
KSBwcm9ncmFtLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisKKyAgICBTdHJpbmcg
cmVzdWx0KGluZm8pOworICAgIGZhc3RGcmVlKGluZm8pOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgQVNTRVJUKHNoYWRl
cik7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT5nZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBwbmFtZSwgdmFs
dWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coV2Vi
R0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworCisgICAgR0xpbnQgbGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2
KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7
CisKKyAgICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RN
YWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoIWluZm8pCisgICAgICAgIHJldHVybiAiIjsKKworICAg
IG1faW50ZXJuYWwtPmdldFNoYWRlckluZm9Mb2coKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwg
bGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisKKyAgICBTdHJpbmcgcmVzdWx0KGluZm8pOworICAgIGZh
c3RGcmVlKGluZm8pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RyaW5nIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbGVuZ3Ro
OworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCks
IEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbGVuZ3RoKTsKKworICAgIEdMc2l6ZWkgc2l6ZTsK
KyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOworICAgIGlm
ICghaW5mbykKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVy
U291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOwor
CisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZvKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRl
cmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFs
dWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgZmxvYXQqIHZhbHVlKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
Z2V0VW5pZm9ybWZ2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBsb2NhdGlvbiwgdmFsdWUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VW5pZm9ybWl2
KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCitsb25n
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIAor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1f
aW50ZXJuYWwtPmdldFVuaWZvcm1Mb2NhdGlvbigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVy
dGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxv
YXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+Z2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVk
IGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5nZXRW
ZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKworbG9uZyBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2ln
bmVkIGxvbmcgcG5hbWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICAKKyAgICB2b2lkKiBwb2ludGVyOworICAgIG1faW50ZXJuYWwtPmdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGxvbmc+KHBvaW50ZXIpOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50
ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJv
cmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7Cisg
ICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKwor
aW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
KQoreworICAgIEFTU0VSVChpbWFnZSk7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAg
R0x1aW50IGZvcm1hdDsKKyAgICBHTHVpbnQgaW50ZXJuYWxGb3JtYXQ7CisKKyAgICBpZiAoIWV4
dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEs
ICZmb3JtYXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJuYWxGb3JtYXQpKSB7
CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEOiBj
b3VsZCBub3QgZXh0cmFjdCBJbWFnZSBkYXRhIjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K
KworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2Ut
PndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgCisgICAgICAgICAgICAgICAgIDAsIGZvcm1hdCwg
R0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7CisKKyAgICByZXR1cm4gMDsKK30K
KyAgICAKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCB1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUs
IHZvaWQqIHBpeGVscykKK3sKKyAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVy
biAwOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQg
dGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgSW1h
Z2UqIGltYWdlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEpCit7CisgICAgQVNT
RVJUKGltYWdlKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgR0x1aW50
IGZvcm1hdDsKKyAgICBHTHVpbnQgaW50ZXJuYWxGb3JtYXQ7CisKKyAgICBpZiAoIWV4dHJhY3RJ
bWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3Jt
YXQsICZpbnRlcm5hbEZvcm1hdCkpIHsKKyAgICAgICAgcVdhcm5pbmcoKSA8PCAiR3JhcGhpY3ND
b250ZXh0M0Q6OnRleFN1YkltYWdlMkQ6IGNvdWxkIG5vdCBleHRyYWN0IEltYWdlIGRhdGEiOwor
ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZ2xUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmYsIHlvZmYsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIAorICAg
ICAgICAgICAgICAgICAgICBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRh
KCkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVCdWZmZXIoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgR0x1aW50IG87CisgICAgbV9pbnRlcm5hbC0+Z2VuQnVmZmVycygxLCAmbyk7Cisg
ICAgcmV0dXJuIG87Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFt
ZWJ1ZmZlcigpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBHTHVpbnQgbzsKKyAgICBtX2ludGVybmFsLT5nZW5GcmFtZWJ1ZmZlcnMoMSwgJm8pOwor
ICAgIHJldHVybiBvOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJv
Z3JhbSgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlUHJvZ3JhbSgpOworfQorCit1bnNpZ25lZCBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIEdMdWludCBvOworICAgIG1faW50ZXJuYWwt
PmdlblJlbmRlcmJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit1bnNpZ25lZCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2lu
dGVybmFsLT5jcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdN
RU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbzsKKyAgICBnbEdlblRleHR1cmVzKDEsICZvKTsK
KyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVy
KHVuc2lnbmVkIGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1l
YnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9pbnRlcm5hbC0+ZGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0odW5zaWduZWQgcHJvZ3JhbSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCByZW5kZXJidWZmZXIpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVTaGFkZXIodW5zaWduZWQgc2hhZGVyKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlU2hhZGVy
KHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUodW5z
aWduZWQgdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworfQorCitpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNpemVJbkJ5dGVzKGludCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgR0xfQllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGJ5dGUpOworICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsK
KyAgICBjYXNlIEdMX1NIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMc2hvcnQpOworICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQp
OworICAgIGNhc2UgR0xfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAg
IGNhc2UgR0xfRkxPQVQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVycm9yKQoreworICAgIG1faW50
ZXJuYWwtPm1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Cit9CisKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGhhc0FscGhhQ2hhbm5lbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHBoYU9wKiBuZWVkZWRBbHBo
YU9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCog
Zm9ybWF0KQoreworICAgIFFJbWFnZTo6Rm9ybWF0IGltYWdlRm9ybWF0ID0gKCFwcmVtdWx0aXBs
eUFscGhhKSA/IAorICAgICAgICBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIgOgorICAgICAgICBRSW1h
Z2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZDsKKyAKKyAgICBRUGl4bWFwKiBuYXRpdmVQ
aXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsgCisKKyAgICAqaGFz
QWxwaGFDaGFubmVsID0gdHJ1ZTsKKyAgICAqbmVlZGVkQWxwaGFPcCA9IGtBbHBoYURvTm90aGlu
ZzsKKyAgICAqZm9ybWF0ID0gR0xfUkdCQTsKKworICAgIFFJbWFnZSBuYXRpdmVJbWFnZSA9IG5h
dGl2ZVBpeG1hcC0+dG9JbWFnZSgpLmNvbnZlcnRUb0Zvcm1hdChpbWFnZUZvcm1hdCk7CisgICAg
b3V0cHV0VmVjdG9yLmFwcGVuZChuYXRpdmVJbWFnZS5iaXRzKCksIG5hdGl2ZUltYWdlLmJ5dGVD
b3VudCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
M0RfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwIGIv
V2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCmluZGV4IGQ2MGYwOWMuLmU2ZmRmNjEgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAorKysgYi9XZWJLaXQvcXQv
QXBpL3F3ZWJzZXR0aW5ncy5jcHAKQEAgLTE1OCw2ICsxNTgsMTMgQEAgdm9pZCBRV2ViU2V0dGlu
Z3NQcml2YXRlOjphcHBseSgpCiAKICAgICAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdFbmFibGVkKHZhbHVlKTsKICNlbmRpZgorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisg
ICAgICAgIHZhbHVlID0gYXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52
YWx1ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCkpOworCisgICAgICAgIHNldHRpbmdzLT5z
ZXRXZWJHTEVuYWJsZWQodmFsdWUpOworI2VuZGlmCisgCiAgICAgICAgIHZhbHVlID0gYXR0cmli
dXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLT5hdHRyaWJ1dGVzLnZhbHVl
KFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzKSk7CiAgICAgICAgIHNldHRp
bmdzLT5zZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KHZhbHVlKTsKQEAg
LTQwMSw2ICs0MDgsNyBAQCBRV2ViU2V0dGluZ3M6OlFXZWJTZXR0aW5ncygpCiAgICAgZC0+YXR0
cmlidXRlcy5pbnNlcnQoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVV
cmxzLCBmYWxzZSk7CiAgICAgZC0+YXR0cmlidXRlcy5pbnNlcnQoUVdlYlNldHRpbmdzOjpMb2Nh
bENvbnRlbnRDYW5BY2Nlc3NGaWxlVXJscywgdHJ1ZSk7CiAgICAgZC0+YXR0cmlidXRlcy5pbnNl
cnQoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgZmFsc2UpOwor
ICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkLCBmYWxz
ZSk7CiAgICAgZC0+b2ZmbGluZVN0b3JhZ2VEZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7
CiAgICAgZC0+ZGVmYXVsdFRleHRFbmNvZGluZyA9IFFMYXRpbjFTdHJpbmcoImlzby04ODU5LTEi
KTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmggYi9XZWJLaXQv
cXQvQXBpL3F3ZWJzZXR0aW5ncy5oCmluZGV4IGIxZjVjZjIuLjI5YzAxYjYgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0
dGluZ3MuaApAQCAtNzAsNyArNzAsOCBAQCBwdWJsaWM6CiAgICAgICAgIExvY2FsQ29udGVudENh
bkFjY2Vzc0ZpbGVVcmxzLAogICAgICAgICBEbnNQcmVmZXRjaEVuYWJsZWQsCiAgICAgICAgIFhT
U0F1ZGl0b3JFbmFibGVkLAotICAgICAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZAor
ICAgICAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwKKyAgICAgICAgV2ViR0xFbmFi
bGVkCiAgICAgfTsKICAgICBlbnVtIFdlYkdyYXBoaWMgewogICAgICAgICBNaXNzaW5nSW1hZ2VH
cmFwaGljLApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1FHVkxhdW5jaGVyL21haW4uY3BwIGIvV2Vi
S2l0L3F0L1FHVkxhdW5jaGVyL21haW4uY3BwCmluZGV4IDQ0OGI0YjAuLjMwN2UxMTggMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9RR1ZMYXVuY2hlci9tYWluLmNwcAorKysgYi9XZWJLaXQvcXQvUUdW
TGF1bmNoZXIvbWFpbi5jcHAKQEAgLTUyMSw2ICs1MjEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgICAgIHVybCA9IGFyZ3MuYXQoMSk7CiAgICAgaWYgKGFyZ3MuY29u
dGFpbnMoIi0tY29tcG9zaXRpbmciKSkKICAgICAgICAgUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0
aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZCwgdHJ1ZSk7CisgICAgaWYgKGFyZ3MuY29udGFpbnMoIi0td2ViZ2wiKSkKKyAgICAg
ICAgUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRp
bmdzOjpXZWJHTEVuYWJsZWQsIHRydWUpOwogCiAgICAgTWFpbldpbmRvdyogd2luZG93ID0gbmV3
IE1haW5XaW5kb3c7CiAgICAgd2luZG93LT5sb2FkKHVybCk7CmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9RdExhdW5jaGVyL21haW4uY3BwIGIvV2ViS2l0VG9vbHMvUXRMYXVuY2hlci9tYWluLmNw
cAppbmRleCAxMjAzY2U3Li5iOGE2NzFiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9RdExhdW5j
aGVyL21haW4uY3BwCisrKyBiL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAKQEAgLTEx
Niw2ICsxMTYsNyBAQCBwcm90ZWN0ZWQgc2xvdHM6CiAKICAgICB2b2lkIHNldFRvdWNoTW9ja2lu
Zyhib29sIG9uKTsKICAgICB2b2lkIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCB0
b2dnbGUpOworICAgIHZvaWQgdG9nZ2xlV2ViR0woYm9vbCB0b2dnbGUpOwogICAgIHZvaWQgaW5p
dGlhbGl6ZVZpZXcoYm9vbCB1c2VHcmFwaGljc1ZpZXcgPSBmYWxzZSk7CiAKIHB1YmxpYyBzbG90
czoKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZyhib29sIHRvZ2dsZSkKICAgICBwYWdlKCktPnNldHRpbmdzKCktPnNl
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCB0
b2dnbGUpOwogfQogCit2b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVXZWJHTChib29sIHRvZ2ds
ZSkKK3sKKyAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6
OldlYkdMRW5hYmxlZCwgdG9nZ2xlKTsKK30KKwogdm9pZCBMYXVuY2hlcldpbmRvdzo6aW5pdGlh
bGl6ZVZpZXcoYm9vbCB1c2VHcmFwaGljc1ZpZXcpCiB7CiAgICAgZGVsZXRlIG1fdmlldzsKQEAg
LTU1NCw2ICs1NjAsMTAgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6c2V0dXBVSSgpCiAgICAgdG9n
Z2xlR3JhcGhpY3NWaWV3LT5zZXRDaGVja2FibGUodHJ1ZSk7CiAgICAgdG9nZ2xlR3JhcGhpY3NW
aWV3LT5zZXRDaGVja2VkKGZhbHNlKTsKIAorICAgIFFBY3Rpb24qIHRvZ2dsZVdlYkdMID0gdG9v
bHNNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSBXZWJHTCIsIHRoaXMsIFNMT1QodG9nZ2xlV2ViR0wo
Ym9vbCkpKTsKKyAgICB0b2dnbGVXZWJHTC0+c2V0Q2hlY2thYmxlKHRydWUpOworICAgIHRvZ2ds
ZVdlYkdMLT5zZXRDaGVja2VkKGZhbHNlKTsKKwogICAgIFFBY3Rpb24qIHRvZ2dsZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmcgPSBncmFwaGljc1ZpZXdNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSBBY2Nl
bGVyYXRlZCBDb21wb3NpdGluZyIsIHRoaXMsIFNMT1QodG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZyhib29sKSkpOwogICAgIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmctPnNldENoZWNr
YWJsZSh0cnVlKTsKICAgICB0b2dnbGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nLT5zZXRDaGVja2Vk
KGZhbHNlKTsKQEAgLTU2OSw2ICs1NzksOCBAQCB2b2lkIExhdW5jaGVyV2luZG93OjpzZXR1cFVJ
KCkKICAgICBmbGlwWUFuaW1hdGVkID0gZ3JhcGhpY3NWaWV3TWVudS0+YWRkQWN0aW9uKCJBbmlt
YXRlZCBZLUZsaXAiKTsKICAgICBmbGlwWUFuaW1hdGVkLT5jb25uZWN0KHRvZ2dsZUdyYXBoaWNz
VmlldywgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpKTsKICAg
ICBmbGlwWUFuaW1hdGVkLT5zZXRFbmFibGVkKGZhbHNlKTsKKworCiB9CiAKIFFXZWJQYWdlKiBX
ZWJQYWdlOjpjcmVhdGVXaW5kb3coUVdlYlBhZ2U6OldlYldpbmRvd1R5cGUgdHlwZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49284</attachid>
            <date>2010-02-23 06:17:04 -0800</date>
            <delta_ts>2010-02-23 08:14:19 -0800</delta_ts>
            <desc>Qt WebGL support</desc>
            <filename>qt-webgl-support-5.diff</filename>
            <type>text/plain</type>
            <size>85776</size>
            <attacher name="Jarkko Sakkinen">jarkko.sakkinen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjA2ZGIxZS4uMjE0YjczMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzEgQEAKKzIwMTAtMDItMjMgIEphcmtrbyBTYWtr
aW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXQgV2ViR0wgc3VwcG9ydAorCisgICAgICAgIEFk
ZHMgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gZm9yIFF0LgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUxNTMKKworICAgICAgICBObyBu
ZXcgdGVzdHMuIAorCisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc1ZhbGlk
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvY0FkZHJlc3MpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Y2xlYXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjb2xvck1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNv
bXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlU
ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZm
ZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyb250
RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBt
YXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJp
Yik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRy
aWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojppc1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3Rl
bmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c3RlbmNpbE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5j
aWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0
ZW5jaWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9w
U2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRl
cmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIx
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6c3ludGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldEltYWdlRGF0YSk6CisKIDIwMTAtMDItMjMgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUucHJpIGIvV2ViQ29yZS9XZWJDb3JlLnByaQppbmRleCAyN2YxYmI2Li5mYzc5ZjhkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcmkK
QEAgLTI4Nyw4ICsyODcsMTcgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICBodG1sL2NhbnZhcy9D
YW52YXNQYXR0ZXJuLmlkbCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5pZGwgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwgXAor
ICAgIGh0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dl
YkdMQnVmZmVyLmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5p
ZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaWRsIFwKKyAgICBodG1sL2Nh
bnZhcy9XZWJHTFByb2dyYW0uaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZl
ci5pZGwgXAogICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgXAorICAg
IGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaG9y
dEFycmF5LmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmlkbCBcCisgICAgaHRt
bC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsIFwKICAgICBodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkQnl0ZUFycmF5LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZElu
dEFycmF5LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaWRs
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJv
CmluZGV4IGM2MjUyMjQuLjhjYzk2MWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8K
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjY4NSw2ICsyNjg1LDg3IEBAIFNPVVJDRVMg
Kz0gXAogfQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfM0RfQ0FOVkFTPTEpIHsKK1FU
ICs9IG9wZW5nbAorSEVBREVSUyArPSBcCisJYmluZGluZ3MvanMvSlNXZWJHTEFycmF5QnVmZmVy
Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEFycmF5SGVscGVyLmggXAorCWJp
bmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9K
U1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xJbnRB
cnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q29uc3Ry
dWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0
b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5o
IFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuaCBc
CisJaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCBcCisJaHRtbC9jYW52YXMv
Q2FudmFzT2JqZWN0LmggXAorCWh0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5oIFwKKwlodG1s
L2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXkuaCBc
CisJaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJy
YXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIFwKKwlodG1sL2Nh
bnZhcy9XZWJHTEZsb2F0QXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5o
IFwKKwlodG1sL2NhbnZhcy9XZWJHTEdldEluZm8uaCBcCisJaHRtbC9jYW52YXMvV2ViR0xJbnRB
cnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJidWZmZXIuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgg
XAorCWh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdMU2hvcnRB
cnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xVbmlmb3JtTG9jYXRpb24uaCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaCBcCisJaHRtbC9jYW52
YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaCAKKworU09VUkNFUyArPSBcCisJYmluZGluZ3MvanMvSlNXZWJHTEFy
cmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlDdXN0
b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwIFwK
KwliaW5kaW5ncy9qcy9KU1dlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMv
SlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xG
bG9hdEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29uc3Ry
dWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMSW50QXJyYXlDdXN0b20uY3BwIFwKKwli
aW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgXAorCWJpbmRpbmdz
L2pzL0pTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dl
YkdMU2hvcnRBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5
dGVBcnJheUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0
ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlD
b25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEludEFycmF5Q3Vz
dG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVj
dG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5j
cHAgXAorCWh0bWwvY2FudmFzL0NhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCBcCisgICAgaHRt
bC9jYW52YXMvQ2FudmFzT2JqZWN0LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xBcnJheUJ1ZmZl
ci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJH
TEJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5LmNwcCBcCisJaHRtbC9j
YW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMRmxv
YXRBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwIFwKKwlodG1s
L2NhbnZhcy9XZWJHTEdldEluZm8uY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmNw
cCBcCisJaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
IFwKKwlodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMU2hv
cnRBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAgXAorCWh0bWwvY2Fu
dmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAg
XAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcCBcCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBcCisKK30KKworCiBpbmNsdWRlKCQkUFdELy4u
L1dlYktpdC9xdC9BcGkvaGVhZGVycy5wcmkpCiBpbmNsdWRlKC4uL2luY2x1ZGUvUXRXZWJLaXQv
Y2xhc3NoZWFkZXJzLnByaSkKIEhFQURFUlMgKz0gJCRXRUJLSVRfQVBJX0hFQURFUlMKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAwYTQxZGM2
Li5jZjFkZjcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oCkBAIC00NCw2ICs0NCwxMyBAQCB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0Q7CiBjb25zdCAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBOdWxsUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCA9IDA7CiB0eXBlZGVmIEdMdWludCBQbGF0Zm9ybTNET2JqZWN0Owog
Y29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7CisjZWxpZiBQ
TEFURk9STShRVCkKKyNpbmNsdWRlIDxRdE9wZW5HTC9RdE9wZW5HTD4KKwordHlwZWRlZiB2b2lk
KiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOworY29uc3QgIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgPSAwOwordHlwZWRlZiBpbnQgUGxh
dGZvcm0zRE9iamVjdDsKK2NvbnN0IFBsYXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3JtM0RPYmpl
Y3QgPSAwOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsK
IGNvbnN0ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEID0gMDsKQEAgLTczLDcgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07
CiAKICAgICAvLyBGSVhNRTogaWRlYWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRm
b3Jtcy4KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwg
UExBVEZPUk0oUVQpCiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICNlbmRp
ZgogCkBAIC00MDksNiArNDE2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VsaWYgUExBVEZP
Uk0oQ0hST01JVU0pCiAgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCgpIGNvbnN0OwogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRm
b3JtVGV4dHVyZSgpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpOworICAgICAgICBQ
bGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OwogI2Vsc2UKICAgICAgICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29u
c3QgeyByZXR1cm4gTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7IH0KICAgICAgICAgUGxh
dGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZv
cm0zRE9iamVjdDsgfQpAQCAtNzA0LDcgKzcxNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNl
bmRpZiAgICAgICAgCiAKICAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgdGhpcyB3b3VsZCBiZSB1
c2VkIG9uIGFsbCBwbGF0Zm9ybXMuCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKFFUKQogICAgICAgICBmcmllbmQgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDsKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw+IG1faW50ZXJuYWw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjM4NzEyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC0wLDAgKzEsMTcxOSBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgVGlldG8gQ29ycG9yYXRpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgICAKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAgICAgCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVk
ZSAiQ2FudmFzT2JqZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZvLmgiCisjaW5j
bHVkZSAiV2ViR0xBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAi
V2ViR0xGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1
ZGUgIldlYkdMSW50QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRl
ICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCisj
aW5jbHVkZSAiV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWYgZGVmaW5lZCAoUVRfT1BFTkdMX0VTXzIpICYmICFkZWZpbmVkKEdMY2hhcikKK3R5cGVk
ZWYgY2hhciBHTGNoYXI7CisjZW5kaWYKKworI2lmbmRlZiBBUElFTlRSWQorI2RlZmluZSBBUElF
TlRSWQorI2VuZGlmCisKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQWN0aXZlVGV4dHVyZVR5
cGUpIChHTGVudW0pOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xBdHRhY2hTaGFkZXJUeXBl
KSAoR0x1aW50LCBHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xCaW5kQXR0cmli
TG9jYXRpb25UeXBlKSAoR0x1aW50LCBHTHVpbnQsIGNvbnN0IGNoYXIgKik7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZICpnbEJpbmRCdWZmZXJUeXBlKSAoR0xlbnVtLCBHTHVpbnQpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqZ2xCaW5kRnJhbWVidWZmZXJUeXBlKSAoR0xlbnVtIHRhcmdldCwg
R0x1aW50IGZyYW1lYnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQmluZFJlbmRl
cmJ1ZmZlclR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkgKmdsQmxlbmRDb2xvclR5cGUpIChHTGNsYW1wZiwgR0xjbGFtcGYs
IEdMY2xhbXBmLCBHTGNsYW1wZik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEJsZW5kRXF1
YXRpb25TZXBhcmF0ZVR5cGUpKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQmxlbmRGdW5jU2VwYXJhdGVUeXBlKShHTGVudW0gc3Jj
UkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSk7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEJ1ZmZlckRhdGFUeXBlKSAoR0xlbnVtLCBHTHNpemVp
cHRyLCBjb25zdCBHTHZvaWQgKiwgR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmds
QnVmZmVyU3ViRGF0YVR5cGUpIChHTGVudW0sIEdMaW50cHRyLCBHTHNpemVpcHRyLCBjb25zdCBH
THZvaWQgKik7Cit0eXBlZGVmIEdMZW51bSAoQVBJRU5UUlkgKmdsQ2hlY2tGcmFtZWJ1ZmZlclN0
YXR1c1R5cGUpIChHTGVudW0gdGFyZ2V0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsQ29t
cGlsZVNoYWRlclR5cGUpIChHTHVpbnQpOwordHlwZWRlZiBHTHVpbnQgKEFQSUVOVFJZICpnbENy
ZWF0ZVByb2dyYW1UeXBlKSAoKTsKK3R5cGVkZWYgR0x1aW50IChBUElFTlRSWSAqZ2xDcmVhdGVT
aGFkZXJUeXBlKSAoR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGVsZXRlQnVm
ZmVyc1R5cGUpIChHTHNpemVpLCBjb25zdCBHTHVpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbERlbGV0ZUZyYW1lYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAq
ZnJhbWVidWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGVsZXRlUHJvZ3JhbVR5
cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xEZWxldGVSZW5kZXJidWZm
ZXJzVHlwZSkgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICpyZW5kZXJidWZmZXJzKTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkgKmdsRGVsZXRlU2hhZGVyVHlwZSkgKEdMdWludCk7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZICpnbERldGFjaFNoYWRlclR5cGUpIChHTHVpbnQsIEdMdWludCk7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGUpIChH
THVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xGcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlclR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVt
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZICpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEVHlwZSkgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQg
bGV2ZWwpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZW5CdWZmZXJzVHlwZSkgKEdMc2l6
ZWksIEdMdWludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2VuZXJhdGVNaXBtYXBU
eXBlKSAoR0xlbnVtIHRhcmdldCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdlbkZyYW1l
YnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIEdMdWludCAqZnJhbWVidWZmZXJzKTsKK3R5cGVkZWYg
dm9pZCAoQVBJRU5UUlkgKmdsR2VuUmVuZGVyYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIEdMdWlu
dCAqcmVuZGVyYnVmZmVycyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdldEFjdGl2ZUF0
dHJpYlR5cGUpIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNpemUs
IEdMc2l6ZWkgKiBsZW5ndGgsIEdMaW50ICogc2l6ZSwgR0xlbnVtICogdHlwZSwgR0xjaGFyICog
bmFtZSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdldEFjdGl2ZVVuaWZvcm1UeXBlKSAo
R0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICog
bGVuZ3RoLCBHTGludCAqIHNpemUsIEdMZW51bSAqIHR5cGUsIEdMY2hhciAqIG5hbWUpOwordHlw
ZWRlZiBHTGludCAoQVBJRU5UUlkgKmdsR2V0QXR0cmliTG9jYXRpb25UeXBlKSAoR0x1aW50LCBj
b25zdCBjaGFyICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdlR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2VHlwZSkgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRQcm9ncmFtSW5mb0xvZ1R5cGUpIChHTHVpbnQs
IEdMc2l6ZWksIEdMc2l6ZWkgKiwgY2hhciAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmds
R2V0UHJvZ3JhbWl2VHlwZSkgKEdMdWludCwgR0xlbnVtLCBHTGludCAqKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZUeXBlKSAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsR2V0U2hhZGVySW5mb0xvZ1R5cGUpIChHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkgKiwg
Y2hhciAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0U2hhZGVyaXZUeXBlKSAoR0x1
aW50LCBHTGVudW0sIEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRTaGFk
ZXJTb3VyY2VUeXBlKSAoR0x1aW50LCBHTHNpemVpLCBHTHNpemVpICosIGNoYXIgKik7Cit0eXBl
ZGVmIEdMaW50IChBUElFTlRSWSAqZ2xHZXRVbmlmb3JtTG9jYXRpb25UeXBlKSAoR0x1aW50LCBj
b25zdCBjaGFyKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbEdldFVuaWZvcm1mdlR5cGUp
IChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgKiBwYXJhbXMpOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xHZXRVbmlmb3JtaXZUeXBlKSAoR0x1aW50IHByb2dyYW0s
IEdMaW50IGxvY2F0aW9uLCBHTGludCAqIHBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpnbEdldFZlcnRleEF0dHJpYmZ2VHlwZSkgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBH
TGZsb2F0ICogcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0VmVydGV4QXR0
cmliaXZUeXBlKSAoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50ICogcGFyYW1zKTsK
K3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnZUeXBlKSAo
R0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMdm9pZCAqKiBwb2ludGVyKTsKK3R5cGVkZWYg
R0xib29sZWFuIChBUElFTlRSWSAqZ2xJc0J1ZmZlclR5cGUpIChHTHVpbnQgYnVmZmVyKTsKK3R5
cGVkZWYgR0xib29sZWFuIChBUElFTlRSWSAqZ2xJc0ZyYW1lYnVmZmVyVHlwZSkgKEdMdWludCBm
cmFtZWJ1ZmZlcik7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkgKmdsSXNQcm9ncmFtVHlw
ZSkgKEdMdWludCk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkgKmdsSXNSZW5kZXJidWZm
ZXJUeXBlKSAoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5U
UlkgKmdsSXNTaGFkZXJUeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmds
TGlua1Byb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsUmVu
ZGVyYnVmZmVyU3RvcmFnZVR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKmdsU2hhZGVyU291cmNlVHlwZSkgKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hhciAqKiwg
Y29uc3QgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFN0ZW5jaWxGdW5jU2Vw
YXJhdGVUeXBlKSAoR0xlbnVtIGZhY2UsIEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBt
YXNrKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsU3RlbmNpbE1hc2tTZXBhcmF0ZVR5cGUp
IChHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xT
dGVuY2lsT3BTZXBhcmF0ZVR5cGUpIChHTGVudW0gZmFjZSwgR0xlbnVtIHNmYWlsLCBHTGVudW0g
ZHBmYWlsLCBHTGVudW0gZHBwYXNzKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9y
bTFmVHlwZSkgKEdMaW50LCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5p
Zm9ybTFmdlR5cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYg
dm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTFpVHlwZSkgKEdMaW50LCBHTGludCk7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm0xaXZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNvbnN0
IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtMmZUeXBlKSAoR0xp
bnQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3Jt
MmZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0ICopOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSAqZ2xVbmlmb3JtMmlUeXBlKSAoR0xpbnQsIEdMaW50LCBHTGludCk7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm0yaXZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNv
bnN0IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtM2ZUeXBlKSAo
R0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSAqZ2xVbmlmb3JtM2Z2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0ICopOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtM2lUeXBlKSAoR0xpbnQsIEdMaW50LCBH
TGludCwgR0xpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtM2l2VHlwZSkg
KEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkg
KmdsVW5pZm9ybTRmVHlwZSkgKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZs
b2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5pZm9ybTRmdlR5cGUpIChHTGludCwg
R0xzaXplaSwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmdsVW5p
Zm9ybTRpVHlwZSkgKEdMaW50LCBHTGludCwgR0xpbnQsIEdMaW50LCBHTGludCk7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm00aXZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNvbnN0
IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVbmlmb3JtTWF0cml4MmZ2VHlw
ZSkgKEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZICpnbFVuaWZvcm1NYXRyaXgzZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWks
IEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKmds
VW5pZm9ybU1hdHJpeDRmdlR5cGUpIChHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBH
TGZsb2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSAqZ2xVc2VQcm9ncmFtVHlwZSkgKEdM
dWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFZhbGlkYXRlUHJvZ3JhbVR5cGUpIChH
THVpbnQgcHJvZ3JhbSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYjFm
VHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpn
bFZlcnRleEF0dHJpYjFmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYjJmVHlwZSkgKEdMdWludCwgY29uc3QgR0xm
bG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFZlcnRleEF0
dHJpYjJmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZICpnbFZlcnRleEF0dHJpYjNmVHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCwgY29u
c3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFZl
cnRleEF0dHJpYjNmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYjRmVHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9h
dCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYjRmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdM
ZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpnbFZlcnRleEF0dHJpYlBvaW50ZXJU
eXBlKSAoR0x1aW50LCBHTGludCwgR0xlbnVtLCBHTGJvb2xlYW4sIEdMc2l6ZWksIGNvbnN0IEdM
dm9pZCAqKTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCB7CitwdWJsaWM6CisK
KyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOworCisgICAgYm9v
bCBpc1ZhbGlkKCkgeyByZXR1cm4gbV92YWxpZDsgfQorCitwdWJsaWM6CisKKyAgICBnbEFjdGl2
ZVRleHR1cmVUeXBlIGFjdGl2ZVRleHR1cmU7CisgICAgZ2xBdHRhY2hTaGFkZXJUeXBlIGF0dGFj
aFNoYWRlcjsKKyAgICBnbEJpbmRBdHRyaWJMb2NhdGlvblR5cGUgYmluZEF0dHJpYkxvY2F0aW9u
OworICAgIGdsQmluZEJ1ZmZlclR5cGUgYmluZEJ1ZmZlcjsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZl
clR5cGUgYmluZEZyYW1lYnVmZmVyOworICAgIGdsQmluZFJlbmRlcmJ1ZmZlclR5cGUgYmluZFJl
bmRlcmJ1ZmZlcjsKKyAgICBnbEJsZW5kQ29sb3JUeXBlIGJsZW5kQ29sb3I7CisgICAgZ2xCbGVu
ZEVxdWF0aW9uU2VwYXJhdGVUeXBlIGJsZW5kRXF1YXRpb25TZXBhcmF0ZTsKKyAgICBnbEJsZW5k
RnVuY1NlcGFyYXRlVHlwZSBibGVuZEZ1bmNTZXBhcmF0ZTsKKyAgICBnbEJ1ZmZlckRhdGFUeXBl
IGJ1ZmZlckRhdGE7CisgICAgZ2xCdWZmZXJTdWJEYXRhVHlwZSBidWZmZXJTdWJEYXRhOworICAg
IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c1R5cGUgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1czsKKyAg
ICBnbENvbXBpbGVTaGFkZXJUeXBlIGNvbXBpbGVTaGFkZXI7CisgICAgZ2xDcmVhdGVQcm9ncmFt
VHlwZSBjcmVhdGVQcm9ncmFtOworICAgIGdsQ3JlYXRlU2hhZGVyVHlwZSBjcmVhdGVTaGFkZXI7
CisgICAgZ2xEZWxldGVCdWZmZXJzVHlwZSBkZWxldGVCdWZmZXJzOworICAgIGdsRGVsZXRlRnJh
bWVidWZmZXJzVHlwZSBkZWxldGVGcmFtZWJ1ZmZlcnM7CisgICAgZ2xEZWxldGVQcm9ncmFtVHlw
ZSBkZWxldGVQcm9ncmFtOworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc1R5cGUgZGVsZXRlUmVu
ZGVyYnVmZmVyczsKKyAgICBnbERlbGV0ZVNoYWRlclR5cGUgZGVsZXRlU2hhZGVyOworICAgIGds
RGV0YWNoU2hhZGVyVHlwZSBkZXRhY2hTaGFkZXI7CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXlUeXBlIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5VHlwZSBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyVHlwZSBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcjsKKyAgICBnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEVHlwZSBmcmFtZWJ1ZmZlclRleHR1cmUyRDsKKyAgICBnbEdlbkJ1ZmZlcnNU
eXBlIGdlbkJ1ZmZlcnM7CisgICAgZ2xHZW5lcmF0ZU1pcG1hcFR5cGUgZ2VuZXJhdGVNaXBtYXA7
CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNUeXBlIGdlbkZyYW1lYnVmZmVyczsKKyAgICBnbEdlblJl
bmRlcmJ1ZmZlcnNUeXBlIGdlblJlbmRlcmJ1ZmZlcnM7CisgICAgZ2xHZXRBY3RpdmVBdHRyaWJU
eXBlIGdldEFjdGl2ZUF0dHJpYjsKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1UeXBlIGdldEFjdGl2
ZVVuaWZvcm07CisgICAgZ2xHZXRBdHRyaWJMb2NhdGlvblR5cGUgZ2V0QXR0cmliTG9jYXRpb247
CisgICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdlR5cGUgZ2V0QnVmZmVyUGFyYW1ldGVyaXY7Cisg
ICAgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdlR5cGUgZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyaXY7CisgICAgZ2xHZXRQcm9ncmFtSW5mb0xvZ1R5cGUgZ2V0
UHJvZ3JhbUluZm9Mb2c7CisgICAgZ2xHZXRQcm9ncmFtaXZUeXBlIGdldFByb2dyYW1pdjsKKyAg
ICBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2VHlwZSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXJpdjsKKyAgICBnbEdldFNoYWRlckluZm9Mb2dUeXBlIGdldFNoYWRlckluZm9Mb2c7CisgICAg
Z2xHZXRTaGFkZXJpdlR5cGUgZ2V0U2hhZGVyaXY7CisgICAgZ2xHZXRTaGFkZXJTb3VyY2VUeXBl
IGdldFNoYWRlclNvdXJjZTsKKyAgICBnbEdldFVuaWZvcm1mdlR5cGUgZ2V0VW5pZm9ybWZ2Owor
ICAgIGdsR2V0VW5pZm9ybWl2VHlwZSBnZXRVbmlmb3JtaXY7CisgICAgZ2xHZXRVbmlmb3JtTG9j
YXRpb25UeXBlIGdldFVuaWZvcm1Mb2NhdGlvbjsKKyAgICBnbEdldFZlcnRleEF0dHJpYmZ2VHlw
ZSBnZXRWZXJ0ZXhBdHRyaWJmdjsKKyAgICBnbEdldFZlcnRleEF0dHJpYml2VHlwZSBnZXRWZXJ0
ZXhBdHRyaWJpdjsKKyAgICBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2VHlwZSBnZXRWZXJ0ZXhB
dHRyaWJQb2ludGVydjsKKyAgICBnbElzQnVmZmVyVHlwZSBpc0J1ZmZlcjsKKyAgICBnbElzRnJh
bWVidWZmZXJUeXBlIGlzRnJhbWVidWZmZXI7CisgICAgZ2xJc1Byb2dyYW1UeXBlIGlzUHJvZ3Jh
bTsKKyAgICBnbElzUmVuZGVyYnVmZmVyVHlwZSBpc1JlbmRlcmJ1ZmZlcjsKKyAgICBnbElzU2hh
ZGVyVHlwZSBpc1NoYWRlcjsKKyAgICBnbExpbmtQcm9ncmFtVHlwZSBsaW5rUHJvZ3JhbTsKKyAg
ICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VUeXBlIHJlbmRlcmJ1ZmZlclN0b3JhZ2U7CisgICAgZ2xT
aGFkZXJTb3VyY2VUeXBlIHNoYWRlclNvdXJjZTsKKyAgICBnbFN0ZW5jaWxGdW5jU2VwYXJhdGVU
eXBlIHN0ZW5jaWxGdW5jU2VwYXJhdGU7CisgICAgZ2xTdGVuY2lsTWFza1NlcGFyYXRlVHlwZSBz
dGVuY2lsTWFza1NlcGFyYXRlOworICAgIGdsU3RlbmNpbE9wU2VwYXJhdGVUeXBlIHN0ZW5jaWxP
cFNlcGFyYXRlOworICAgIGdsVW5pZm9ybTFmVHlwZSB1bmlmb3JtMWY7CisgICAgZ2xVbmlmb3Jt
MWZ2VHlwZSB1bmlmb3JtMWZ2OworICAgIGdsVW5pZm9ybTFpVHlwZSB1bmlmb3JtMWk7CisgICAg
Z2xVbmlmb3JtMWl2VHlwZSB1bmlmb3JtMWl2OworICAgIGdsVW5pZm9ybTJmVHlwZSB1bmlmb3Jt
MmY7CisgICAgZ2xVbmlmb3JtMmZ2VHlwZSB1bmlmb3JtMmZ2OworICAgIGdsVW5pZm9ybTJpVHlw
ZSB1bmlmb3JtMmk7CisgICAgZ2xVbmlmb3JtMml2VHlwZSB1bmlmb3JtMml2OworICAgIGdsVW5p
Zm9ybTNmVHlwZSB1bmlmb3JtM2Y7CisgICAgZ2xVbmlmb3JtM2Z2VHlwZSB1bmlmb3JtM2Z2Owor
ICAgIGdsVW5pZm9ybTNpVHlwZSB1bmlmb3JtM2k7CisgICAgZ2xVbmlmb3JtM2l2VHlwZSB1bmlm
b3JtM2l2OworICAgIGdsVW5pZm9ybTRmVHlwZSB1bmlmb3JtNGY7CisgICAgZ2xVbmlmb3JtNGZ2
VHlwZSB1bmlmb3JtNGZ2OworICAgIGdsVW5pZm9ybTRpVHlwZSB1bmlmb3JtNGk7CisgICAgZ2xV
bmlmb3JtNGl2VHlwZSB1bmlmb3JtNGl2OworICAgIGdsVW5pZm9ybU1hdHJpeDJmdlR5cGUgdW5p
Zm9ybU1hdHJpeDJmdjsKKyAgICBnbFVuaWZvcm1NYXRyaXgzZnZUeXBlIHVuaWZvcm1NYXRyaXgz
ZnY7CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2VHlwZSB1bmlmb3JtTWF0cml4NGZ2OworICAgIGds
VXNlUHJvZ3JhbVR5cGUgdXNlUHJvZ3JhbTsKKyAgICBnbFZhbGlkYXRlUHJvZ3JhbVR5cGUgdmFs
aWRhdGVQcm9ncmFtOworICAgIGdsVmVydGV4QXR0cmliMWZUeXBlIHZlcnRleEF0dHJpYjFmOwor
ICAgIGdsVmVydGV4QXR0cmliMWZ2VHlwZSB2ZXJ0ZXhBdHRyaWIxZnY7CisgICAgZ2xWZXJ0ZXhB
dHRyaWIyZlR5cGUgdmVydGV4QXR0cmliMmY7CisgICAgZ2xWZXJ0ZXhBdHRyaWIyZnZUeXBlIHZl
cnRleEF0dHJpYjJmdjsKKyAgICBnbFZlcnRleEF0dHJpYjNmVHlwZSB2ZXJ0ZXhBdHRyaWIzZjsK
KyAgICBnbFZlcnRleEF0dHJpYjNmdlR5cGUgdmVydGV4QXR0cmliM2Z2OworICAgIGdsVmVydGV4
QXR0cmliNGZUeXBlIHZlcnRleEF0dHJpYjRmOworICAgIGdsVmVydGV4QXR0cmliNGZ2VHlwZSB2
ZXJ0ZXhBdHRyaWI0ZnY7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyVHlwZSB2ZXJ0ZXhBdHRy
aWJQb2ludGVyOworCitwdWJsaWM6CisKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBtX2F0dHJzOworICAgIFFHTFdpZGdldCogbV9nbFdpZGdldDsKKyAgICBHTHVpbnQgbV90ZXh0
dXJlOworICAgIEdMdWludCBtX21haW5GYm87CisgICAgR0x1aW50IG1fY3VycmVudEZibzsKKyAg
ICBHTHVpbnQgbV9kZXB0aEJ1ZmZlcjsKKyAgICBRSW1hZ2UgbV9waXhlbHM7CisgICAgTGlzdEhh
c2hTZXQ8dW5zaWduZWQgbG9uZz4gbV9zeW50aGV0aWNFcnJvcnM7CisKK3ByaXZhdGU6CisKKyAg
ICB2b2lkKiBnZXRQcm9jQWRkcmVzcyhjb25zdCBRR0xDb250ZXh0KiBjdHgsIGNvbnN0IFFTdHJp
bmcmIHByb2MpOworCitwcml2YXRlOgorCisgICAgYm9vbCBtX3ZhbGlkOworfTsKKworR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKKyAgICA6IG1fYXR0cnMoYXR0cnMpCisgICAgLCBt
X2dsV2lkZ2V0KDApCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1fbWFpbkZibygwKQorICAg
ICwgbV9jdXJyZW50RmJvKDApCisgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX3ZhbGlk
KHRydWUpCit7CisgICAgbV9hdHRycy5hbHBoYSA9IHRydWU7CisgICAgbV9hdHRycy5kZXB0aCA9
IHRydWU7CisgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgbV9hdHRycy5hbnRpYWxp
YXMgPSBmYWxzZTsKKyAgICBtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7CisKKyAg
ICBRR0xGb3JtYXQgZm9ybWF0OworCisgICAgZm9ybWF0LnNldERlcHRoKHRydWUpOworICAgIGZv
cm1hdC5zZXRTYW1wbGVCdWZmZXJzKHRydWUpOworICAgIGZvcm1hdC5zZXRTdGVuY2lsKGZhbHNl
KTsKKworICAgIG1fZ2xXaWRnZXQgPSBuZXcgUUdMV2lkZ2V0KGZvcm1hdCk7CisgICAgaWYgKCFt
X2dsV2lkZ2V0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgcVdhcm5pbmcoIkdyYXBoaWNzQ29udGV4
dDNEOiBRR0xXaWRnZXQgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGNvbnRleHQiKTsKKyAgICAgICAg
bV92YWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKworICAgIGNvbnN0IFFHTENvbnRleHQqIGN0eCA9IG1fZ2xXaWRn
ZXQtPmNvbnRleHQoKTsKKworI2lmICFkZWZpbmVkIChRVF9PUEVOR0xfRVNfMikgCisgICAgYWN0
aXZlVGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xBY3RpdmVUZXh0dXJlVHlwZT4oZ2V0UHJv
Y0FkZHJlc3MoY3R4LCAiZ2xBY3RpdmVUZXh0dXJlIikpOworICAgIGF0dGFjaFNoYWRlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xBdHRhY2hTaGFkZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJn
bEF0dGFjaFNoYWRlciIpKTsKKyAgICBiaW5kQXR0cmliTG9jYXRpb24gPSByZWludGVycHJldF9j
YXN0PGdsQmluZEF0dHJpYkxvY2F0aW9uVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCaW5k
QXR0cmliTG9jYXRpb24iKSk7CisgICAgYmluZEJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xC
aW5kQnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCaW5kQnVmZmVyIikpOworICAg
IGJpbmRGcmFtZWJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCaW5kRnJhbWVidWZmZXJUeXBl
PihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJpbmRGcmFtZWJ1ZmZlciIpKTsKKyAgICBiaW5kUmVu
ZGVyYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbEJpbmRSZW5kZXJidWZmZXJUeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbEJpbmRSZW5kZXJidWZmZXIiKSk7CisgICAgYmxlbmRDb2xvciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCbGVuZENvbG9yVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAi
Z2xCbGVuZENvbG9yIikpOworICAgIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJn
bEJsZW5kRXF1YXRpb25TZXBhcmF0ZSIpKTsKKyAgICBibGVuZEZ1bmNTZXBhcmF0ZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xCbGVuZEZ1bmNTZXBhcmF0ZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwg
ImdsQmxlbmRGdW5jU2VwYXJhdGUiKSk7CisgICAgYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Z2xCdWZmZXJEYXRhVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCdWZmZXJEYXRhIikp
OworICAgIGJ1ZmZlclN1YkRhdGEgPSByZWludGVycHJldF9jYXN0PGdsQnVmZmVyU3ViRGF0YVR5
cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQnVmZmVyU3ViRGF0YSIpKTsKKyAgICBjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzID0gcmVpbnRlcnByZXRfY2FzdDxnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMiKSk7
CisgICAgY29tcGlsZVNoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xDb21waWxlU2hhZGVyVHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xDb21waWxlU2hhZGVyIikpOworICAgIGNyZWF0ZVBy
b2dyYW0gPSByZWludGVycHJldF9jYXN0PGdsQ3JlYXRlUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsQ3JlYXRlUHJvZ3JhbSIpKTsKKyAgICBjcmVhdGVTaGFkZXIgPSByZWludGVy
cHJldF9jYXN0PGdsQ3JlYXRlU2hhZGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xDcmVh
dGVTaGFkZXIiKSk7CisgICAgZGVsZXRlQnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxl
dGVCdWZmZXJzVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xEZWxldGVCdWZmZXJzIikpOwor
ICAgIGRlbGV0ZUZyYW1lYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxldGVGcmFtZWJ1
ZmZlcnNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERlbGV0ZUZyYW1lYnVmZmVycyIpKTsK
KyAgICBkZWxldGVQcm9ncmFtID0gcmVpbnRlcnByZXRfY2FzdDxnbERlbGV0ZVByb2dyYW1UeXBl
PihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERlbGV0ZVByb2dyYW0iKSk7CisgICAgZGVsZXRlUmVu
ZGVyYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxldGVSZW5kZXJidWZmZXJzVHlwZT4o
Z2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xEZWxldGVSZW5kZXJidWZmZXJzIikpOworICAgIGRlbGV0
ZVNoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxldGVTaGFkZXJUeXBlPihnZXRQcm9jQWRk
cmVzcyhjdHgsICJnbERlbGV0ZVNoYWRlciIpKTsKKyAgICBkZXRhY2hTaGFkZXIgPSByZWludGVy
cHJldF9jYXN0PGdsRGV0YWNoU2hhZGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xEZXRh
Y2hTaGFkZXIiKSk7CisgICAgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ID0gcmVpbnRlcnByZXRf
Y2FzdDxnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwg
ImdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5IikpOworICAgIGVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5ID0gcmVpbnRlcnByZXRfY2FzdDxnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZT4oZ2V0
UHJvY0FkZHJlc3MoY3R4LCAiZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIpKTsKKyAgICBmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIiKSk7CisgICAgZnJhbWVidWZmZXJUZXh0dXJlMkQgPSByZWludGVycHJldF9jYXN0PGdsRnJh
bWVidWZmZXJUZXh0dXJlMkRUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEZyYW1lYnVmZmVy
VGV4dHVyZTJEIikpOworICAgIGdlbkJ1ZmZlcnMgPSByZWludGVycHJldF9jYXN0PGdsR2VuQnVm
ZmVyc1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2VuQnVmZmVycyIpKTsKKyAgICBnZW5l
cmF0ZU1pcG1hcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZW5lcmF0ZU1pcG1hcFR5cGU+KGdldFBy
b2NBZGRyZXNzKGN0eCwgImdsR2VuZXJhdGVNaXBtYXAiKSk7CisgICAgZ2VuRnJhbWVidWZmZXJz
ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdlbkZyYW1lYnVmZmVyc1R5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsR2VuRnJhbWVidWZmZXJzIikpOworICAgIGdlblJlbmRlcmJ1ZmZlcnMgPSByZWlu
dGVycHJldF9jYXN0PGdsR2VuUmVuZGVyYnVmZmVyc1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwg
ImdsR2VuUmVuZGVyYnVmZmVycyIpKTsKKyAgICBnZXRBY3RpdmVBdHRyaWIgPSByZWludGVycHJl
dF9jYXN0PGdsR2V0QWN0aXZlQXR0cmliVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRB
Y3RpdmVBdHRyaWIiKSk7CisgICAgZ2V0QWN0aXZlVW5pZm9ybSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Z2xHZXRBY3RpdmVVbmlmb3JtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRBY3RpdmVV
bmlmb3JtIikpOworICAgIGdldEF0dHJpYkxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxnbEdl
dEF0dHJpYkxvY2F0aW9uVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRBdHRyaWJMb2Nh
dGlvbiIpKTsKKyAgICBnZXRCdWZmZXJQYXJhbWV0ZXJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xH
ZXRCdWZmZXJQYXJhbWV0ZXJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0QnVmZmVy
UGFyYW1ldGVyaXYiKSk7CisgICAgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYg
PSByZWludGVycHJldF9jYXN0PGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZU
eXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2IikpOworICAgIGdldFByb2dyYW1JbmZvTG9nID0gcmVpbnRlcnByZXRfY2FzdDxnbEdl
dFByb2dyYW1JbmZvTG9nVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRQcm9ncmFtSW5m
b0xvZyIpKTsKKyAgICBnZXRQcm9ncmFtaXYgPSByZWludGVycHJldF9jYXN0PGdsR2V0UHJvZ3Jh
bWl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRQcm9ncmFtaXYiKSk7CisgICAgZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYgPSByZWludGVycHJldF9jYXN0PGdsR2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2IikpOworICAgIGdldFNoYWRlckluZm9Mb2cgPSByZWludGVycHJldF9jYXN0
PGdsR2V0U2hhZGVySW5mb0xvZ1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0U2hhZGVy
SW5mb0xvZyIpKTsKKyAgICBnZXRTaGFkZXJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRTaGFk
ZXJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0U2hhZGVyaXYiKSk7CisgICAgZ2V0
U2hhZGVyU291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFNoYWRlclNvdXJjZVR5cGU+KGdl
dFByb2NBZGRyZXNzKGN0eCwgImdsR2V0U2hhZGVyU291cmNlIikpOworICAgIGdldFVuaWZvcm1m
diA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRVbmlmb3JtZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhj
dHgsICJnbEdldFVuaWZvcm1mdiIpKTsKKyAgICBnZXRVbmlmb3JtaXYgPSByZWludGVycHJldF9j
YXN0PGdsR2V0VW5pZm9ybWl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRVbmlmb3Jt
aXYiKSk7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFVu
aWZvcm1Mb2NhdGlvblR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0VW5pZm9ybUxvY2F0
aW9uIikpOworICAgIGdldFZlcnRleEF0dHJpYmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFZl
cnRleEF0dHJpYmZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRWZXJ0ZXhBdHRyaWJm
diIpKTsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRWZXJ0
ZXhBdHRyaWJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0VmVydGV4QXR0cmliaXYi
KSk7CisgICAgZ2V0VmVydGV4QXR0cmliUG9pbnRlcnYgPSByZWludGVycHJldF9jYXN0PGdsR2V0
VmVydGV4QXR0cmliUG9pbnRlcnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2IikpOworICAgIGlzQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbElz
QnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xJc0J1ZmZlciIpKTsKKyAgICBpc0Zy
YW1lYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbElzRnJhbWVidWZmZXJUeXBlPihnZXRQcm9j
QWRkcmVzcyhjdHgsICJnbElzRnJhbWVidWZmZXIiKSk7CisgICAgaXNQcm9ncmFtID0gcmVpbnRl
cnByZXRfY2FzdDxnbElzUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsSXNQcm9n
cmFtIikpOworICAgIGlzUmVuZGVyYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbElzUmVuZGVy
YnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xJc1JlbmRlcmJ1ZmZlciIpKTsKKyAg
ICBpc1NoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xJc1NoYWRlclR5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsSXNTaGFkZXIiKSk7CisgICAgbGlua1Byb2dyYW0gPSByZWludGVycHJldF9j
YXN0PGdsTGlua1Byb2dyYW1UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbExpbmtQcm9ncmFt
IikpOworICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGdsUmVuZGVy
YnVmZmVyU3RvcmFnZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsUmVuZGVyYnVmZmVyU3Rv
cmFnZSIpKTsKKyAgICBzaGFkZXJTb3VyY2UgPSByZWludGVycHJldF9jYXN0PGdsU2hhZGVyU291
cmNlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xTaGFkZXJTb3VyY2UiKSk7CisgICAgc3Rl
bmNpbEZ1bmNTZXBhcmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xTdGVuY2lsRnVuY1NlcGFyYXRl
VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xTdGVuY2lsRnVuY1NlcGFyYXRlIikpOworICAg
IHN0ZW5jaWxNYXNrU2VwYXJhdGUgPSByZWludGVycHJldF9jYXN0PGdsU3RlbmNpbE1hc2tTZXBh
cmF0ZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsU3RlbmNpbE1hc2tTZXBhcmF0ZSIpKTsK
KyAgICBzdGVuY2lsT3BTZXBhcmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xTdGVuY2lsT3BTZXBh
cmF0ZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsU3RlbmNpbE9wU2VwYXJhdGUiKSk7Cisg
ICAgdW5pZm9ybTFmID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0xZlR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsVW5pZm9ybTFmIikpOworICAgIHVuaWZvcm0xZnYgPSByZWludGVycHJl
dF9jYXN0PGdsVW5pZm9ybTFmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTFm
diIpKTsKKyAgICB1bmlmb3JtMWkgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTFpVHlwZT4o
Z2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMWkiKSk7CisgICAgdW5pZm9ybTFpdiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtMWl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xV
bmlmb3JtMWl2IikpOworICAgIHVuaWZvcm0yZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3Jt
MmZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0yZiIpKTsKKyAgICB1bmlmb3Jt
MmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0yZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhj
dHgsICJnbFVuaWZvcm0yZnYiKSk7CisgICAgdW5pZm9ybTJpID0gcmVpbnRlcnByZXRfY2FzdDxn
bFVuaWZvcm0yaVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTJpIikpOworICAg
IHVuaWZvcm0yaXYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTJpdlR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsVW5pZm9ybTJpdiIpKTsKKyAgICB1bmlmb3JtM2YgPSByZWludGVycHJl
dF9jYXN0PGdsVW5pZm9ybTNmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtM2Yi
KSk7CisgICAgdW5pZm9ybTNmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtM2Z2VHlwZT4o
Z2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtM2Z2IikpOworICAgIHVuaWZvcm0zaSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtM2lUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVu
aWZvcm0zaSIpKTsKKyAgICB1bmlmb3JtM2l2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0z
aXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0zaXYiKSk7CisgICAgdW5pZm9y
bTRmID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm00ZlR5cGU+KGdldFByb2NBZGRyZXNzKGN0
eCwgImdsVW5pZm9ybTRmIikpOworICAgIHVuaWZvcm00ZnYgPSByZWludGVycHJldF9jYXN0PGds
VW5pZm9ybTRmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTRmdiIpKTsKKyAg
ICB1bmlmb3JtNGkgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTRpVHlwZT4oZ2V0UHJvY0Fk
ZHJlc3MoY3R4LCAiZ2xVbmlmb3JtNGkiKSk7CisgICAgdW5pZm9ybTRpdiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xVbmlmb3JtNGl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtNGl2
IikpOworICAgIHVuaWZvcm1NYXRyaXgyZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybU1h
dHJpeDJmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJpeDJmdiIpKTsK
KyAgICB1bmlmb3JtTWF0cml4M2Z2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm1NYXRyaXgz
ZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm1NYXRyaXgzZnYiKSk7CisgICAg
dW5pZm9ybU1hdHJpeDRmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtTWF0cml4NGZ2VHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtTWF0cml4NGZ2IikpOworICAgIHVzZVBy
b2dyYW0gPSByZWludGVycHJldF9jYXN0PGdsVXNlUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsVXNlUHJvZ3JhbSIpKTsKKyAgICB2YWxpZGF0ZVByb2dyYW0gPSByZWludGVycHJl
dF9jYXN0PGdsVmFsaWRhdGVQcm9ncmFtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xWYWxp
ZGF0ZVByb2dyYW0iKSk7CisgICAgdmVydGV4QXR0cmliMWYgPSByZWludGVycHJldF9jYXN0PGds
VmVydGV4QXR0cmliMWZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjFm
IikpOworICAgIHZlcnRleEF0dHJpYjFmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRy
aWIxZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjFmdiIpKTsKKyAg
ICB2ZXJ0ZXhBdHRyaWIyZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRyaWIyZlR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVmVydGV4QXR0cmliMmYiKSk7CisgICAgdmVydGV4QXR0
cmliMmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjJmdlR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsVmVydGV4QXR0cmliMmZ2IikpOworICAgIHZlcnRleEF0dHJpYjNmID0g
cmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjNmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xWZXJ0ZXhBdHRyaWIzZiIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWIzZnYgPSByZWludGVycHJl
dF9jYXN0PGdsVmVydGV4QXR0cmliM2Z2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xWZXJ0
ZXhBdHRyaWIzZnYiKSk7CisgICAgdmVydGV4QXR0cmliNGYgPSByZWludGVycHJldF9jYXN0PGds
VmVydGV4QXR0cmliNGZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjRm
IikpOworICAgIHZlcnRleEF0dHJpYjRmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRy
aWI0ZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjRmdiIpKTsKKyAg
ICB2ZXJ0ZXhBdHRyaWJQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYlBv
aW50ZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYlBvaW50ZXIiKSk7
CisjZWxzZQorICAgIGFjdGl2ZVRleHR1cmUgPSBnbEFjdGl2ZVRleHR1cmU7CisgICAgYXR0YWNo
U2hhZGVyID0gZ2xBdHRhY2hTaGFkZXI7CisgICAgYmluZEF0dHJpYkxvY2F0aW9uID0gZ2xCaW5k
QXR0cmliTG9jYXRpb247CisgICAgYmluZEJ1ZmZlciA9IGdsQmluZEJ1ZmZlcjsKKyAgICBiaW5k
RnJhbWVidWZmZXIgPSBnbEJpbmRGcmFtZWJ1ZmZlcjsKKyAgICBiaW5kUmVuZGVyYnVmZmVyID0g
Z2xCaW5kUmVuZGVyYnVmZmVyOworICAgIGJsZW5kQ29sb3IgPSBnbEJsZW5kQ29sb3I7CisgICAg
YmxlbmRFcXVhdGlvblNlcGFyYXRlID0gZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGU7CisgICAgYmxl
bmRGdW5jU2VwYXJhdGUgPSBnbEJsZW5kRnVuY1NlcGFyYXRlOworICAgIGJ1ZmZlckRhdGEgPSBn
bEJ1ZmZlckRhdGE7CisgICAgYnVmZmVyU3ViRGF0YSA9IGdsQnVmZmVyU3ViRGF0YTsKKyAgICBj
aGVja0ZyYW1lYnVmZmVyU3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzOworICAgIGNv
bXBpbGVTaGFkZXIgPSBnbENvbXBpbGVTaGFkZXI7CisgICAgY3JlYXRlUHJvZ3JhbSA9IGdsQ3Jl
YXRlUHJvZ3JhbTsKKyAgICBjcmVhdGVTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcjsKKyAgICBkZWxl
dGVCdWZmZXJzID0gZ2xEZWxldGVCdWZmZXJzOworICAgIGRlbGV0ZUZyYW1lYnVmZmVycyA9IGds
RGVsZXRlRnJhbWVidWZmZXJzOworICAgIGRlbGV0ZVByb2dyYW0gPSBnbERlbGV0ZVByb2dyYW07
CisgICAgZGVsZXRlUmVuZGVyYnVmZmVycyA9IGdsRGVsZXRlUmVuZGVyYnVmZmVyczsKKyAgICBk
ZWxldGVTaGFkZXIgPSBnbERlbGV0ZVNoYWRlcjsKKyAgICBkZXRhY2hTaGFkZXIgPSBnbERldGFj
aFNoYWRlcjsKKyAgICBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkgPSBnbERpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheTsKKyAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSA9IGdsRW5hYmxlVmVydGV4
QXR0cmliQXJyYXk7CisgICAgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIgPSBnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyOworICAgIGZyYW1lYnVmZmVyVGV4dHVyZTJEID0gZ2xGcmFtZWJ1ZmZlclRl
eHR1cmUyRDsKKyAgICBnZW5CdWZmZXJzID0gZ2xHZW5CdWZmZXJzOworICAgIGdlbmVyYXRlTWlw
bWFwID0gZ2xHZW5lcmF0ZU1pcG1hcDsKKyAgICBnZW5GcmFtZWJ1ZmZlcnMgPSBnbEdlbkZyYW1l
YnVmZmVyczsKKyAgICBnZW5SZW5kZXJidWZmZXJzID0gZ2xHZW5SZW5kZXJidWZmZXJzOworICAg
IGdldEFjdGl2ZUF0dHJpYiA9IGdsR2V0QWN0aXZlQXR0cmliOworICAgIGdldEFjdGl2ZVVuaWZv
cm0gPSBnbEdldEFjdGl2ZVVuaWZvcm07CisgICAgZ2V0QXR0cmliTG9jYXRpb24gPSBnbEdldEF0
dHJpYkxvY2F0aW9uOworICAgIGdldEJ1ZmZlclBhcmFtZXRlcml2ID0gZ2xHZXRCdWZmZXJQYXJh
bWV0ZXJpdjsKKyAgICBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiA9IGdsR2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXY7CisgICAgZ2V0UHJvZ3JhbUluZm9Mb2cg
PSBnbEdldFByb2dyYW1JbmZvTG9nOworICAgIGdldFByb2dyYW1pdiA9IGdsR2V0UHJvZ3JhbWl2
OworICAgIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2ID0gZ2xHZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdjsKKyAgICBnZXRTaGFkZXJJbmZvTG9nID0gZ2xHZXRTaGFkZXJJbmZvTG9nOworICAg
IGdldFNoYWRlcml2ID0gZ2xHZXRTaGFkZXJpdjsKKyAgICBnZXRTaGFkZXJTb3VyY2UgPSBnbEdl
dFNoYWRlclNvdXJjZTsKKyAgICBnZXRVbmlmb3JtZnYgPSBnbEdldFVuaWZvcm1mdjsKKyAgICBn
ZXRVbmlmb3JtaXYgPSBnbEdldFVuaWZvcm1pdjsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24gPSBn
bEdldFVuaWZvcm1Mb2NhdGlvbjsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJmdiA9IGdsR2V0VmVydGV4
QXR0cmliZnY7CisgICAgZ2V0VmVydGV4QXR0cmliaXYgPSBnbEdldFZlcnRleEF0dHJpYml2Owor
ICAgIGdldFZlcnRleEF0dHJpYlBvaW50ZXJ2ID0gZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydjsK
KyAgICBpc0J1ZmZlciA9IGdsSXNCdWZmZXI7CisgICAgaXNGcmFtZWJ1ZmZlciA9IGdsSXNGcmFt
ZWJ1ZmZlcjsKKyAgICBpc1Byb2dyYW0gPSBnbElzUHJvZ3JhbTsKKyAgICBpc1JlbmRlcmJ1ZmZl
ciA9IGdsSXNSZW5kZXJidWZmZXI7CisgICAgaXNTaGFkZXIgPSBnbElzU2hhZGVyOworICAgIGxp
bmtQcm9ncmFtID0gZ2xMaW5rUHJvZ3JhbTsKKyAgICByZW5kZXJidWZmZXJTdG9yYWdlID0gZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlOworICAgIHNoYWRlclNvdXJjZSA9IGdsU2hhZGVyU291cmNlOwor
ICAgIHN0ZW5jaWxGdW5jU2VwYXJhdGUgPSBnbFN0ZW5jaWxGdW5jU2VwYXJhdGU7CisgICAgc3Rl
bmNpbE1hc2tTZXBhcmF0ZSA9IGdsU3RlbmNpbE1hc2tTZXBhcmF0ZTsKKyAgICBzdGVuY2lsT3BT
ZXBhcmF0ZSA9IGdsU3RlbmNpbE9wU2VwYXJhdGU7CisgICAgdW5pZm9ybTFmID0gZ2xVbmlmb3Jt
MWY7CisgICAgdW5pZm9ybTFmdiA9IGdsVW5pZm9ybTFmdjsKKyAgICB1bmlmb3JtMWkgPSBnbFVu
aWZvcm0xaTsKKyAgICB1bmlmb3JtMWl2ID0gZ2xVbmlmb3JtMWl2OworICAgIHVuaWZvcm0yZiA9
IGdsVW5pZm9ybTJmOworICAgIHVuaWZvcm0yZnYgPSBnbFVuaWZvcm0yZnY7CisgICAgdW5pZm9y
bTJpID0gZ2xVbmlmb3JtMmk7CisgICAgdW5pZm9ybTJpdiA9IGdsVW5pZm9ybTJpdjsKKyAgICB1
bmlmb3JtM2YgPSBnbFVuaWZvcm0zZjsKKyAgICB1bmlmb3JtM2Z2ID0gZ2xVbmlmb3JtM2Z2Owor
ICAgIHVuaWZvcm0zaSA9IGdsVW5pZm9ybTNpOworICAgIHVuaWZvcm0zaXYgPSBnbFVuaWZvcm0z
aXY7CisgICAgdW5pZm9ybTRmID0gZ2xVbmlmb3JtNGY7CisgICAgdW5pZm9ybTRmdiA9IGdsVW5p
Zm9ybTRmdjsKKyAgICB1bmlmb3JtNGkgPSBnbFVuaWZvcm00aTsKKyAgICB1bmlmb3JtNGl2ID0g
Z2xVbmlmb3JtNGl2OworICAgIHVuaWZvcm1NYXRyaXgyZnYgPSBnbFVuaWZvcm1NYXRyaXgyZnY7
CisgICAgdW5pZm9ybU1hdHJpeDNmdiA9IGdsVW5pZm9ybU1hdHJpeDNmdjsKKyAgICB1bmlmb3Jt
TWF0cml4NGZ2ID0gZ2xVbmlmb3JtTWF0cml4NGZ2OworICAgIHVzZVByb2dyYW0gPSBnbFVzZVBy
b2dyYW07CisgICAgdmFsaWRhdGVQcm9ncmFtID0gZ2xWYWxpZGF0ZVByb2dyYW07CisgICAgdmVy
dGV4QXR0cmliMWYgPSBnbFZlcnRleEF0dHJpYjFmOworICAgIHZlcnRleEF0dHJpYjFmdiA9IGds
VmVydGV4QXR0cmliMWZ2OworICAgIHZlcnRleEF0dHJpYjJmID0gZ2xWZXJ0ZXhBdHRyaWIyZjsK
KyAgICB2ZXJ0ZXhBdHRyaWIyZnYgPSBnbFZlcnRleEF0dHJpYjJmdjsKKyAgICB2ZXJ0ZXhBdHRy
aWIzZiA9IGdsVmVydGV4QXR0cmliM2Y7CisgICAgdmVydGV4QXR0cmliM2Z2ID0gZ2xWZXJ0ZXhB
dHRyaWIzZnY7CisgICAgdmVydGV4QXR0cmliNGYgPSBnbFZlcnRleEF0dHJpYjRmOworICAgIHZl
cnRleEF0dHJpYjRmdiA9IGdsVmVydGV4QXR0cmliNGZ2OworICAgIHZlcnRleEF0dHJpYlBvaW50
ZXIgPSBnbFZlcnRleEF0dHJpYlBvaW50ZXI7CisjZW5kaWYKKworICAgIGlmICghbV92YWxpZCkg
eworICAgICAgICBxV2FybmluZygiR3JhcGhpY3NDb250ZXh0M0Q6IEFsbCBuZWVkZWQgT3BlbkdM
IGV4dGVuc2lvbnMgYXJlIG5vdCBhdmFpbGFibGUiKTsKKyAgICAgICAgbV92YWxpZCA9IGZhbHNl
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0
dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAg
Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9N
SU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsK
KyAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgMSwgMSwgMCwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCAwKTsKKworICAgIGdlbkZyYW1lYnVmZmVycygxLCAmbV9tYWluRmJvKTsKKyAgICBtX2N1
cnJlbnRGYm8gPSBtX21haW5GYm87CisKKyAgICBiaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX21haW5GYm8pOworCisgICAgZ2VuUmVuZGVyYnVmZmVycygx
LCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgYmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKyNpZmRlZiBHTF9ERVBUSF9DT01QT05F
TlQyNAorICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMjQsIDEsIDEpOworI2Vsc2UKKyAgICByZW5kZXJidWZm
ZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX0RFUFRIX0NPTVBP
TkVOVDE2LCAxLCAxKTsKKyNlbmRpZgorCisgICAgYmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAKKyAgICBmcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBtX2RlcHRoQnVmZmVyKTsKKyAgICBnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisKKyAgICBp
ZiAoY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIp
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICBx
V2FybmluZygpIDw8ICJHcmFwaGljc0NvbnRleHQzRDogSW52YWxpZCBGQk8iIDw8IGNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKTsKKyAgICAgICAg
bV92YWxpZCA9IGZhbHNlOworICAgIH0KK30KKworR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQoreworICAgIGRlbGV0ZSBtX2dsV2lkZ2V0Owor
ICAgIG1fZ2xXaWRnZXQgPSAwOworfQorCit2b2lkKiBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpnZXRQcm9jQWRkcmVzcyhjb25zdCBRR0xDb250ZXh0KiBjdHgsIGNvbnN0IFFTdHJpbmcmIHBy
b2MpCit7CisgICAgUVN0cmluZyBleHRbM10gPSB7ICIiLCAiQVJCIiwgIkVYVCIgfTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgIHZvaWQqIGFkZHIgPSBjdHgt
PmdldFByb2NBZGRyZXNzKFFMYXRpbjFTdHJpbmcoKHByb2MgKyBleHRbaV0pLnRvTGF0aW4xKCkp
KTsKKyAgICAgICAgaWYgKGFkZHIpIAorICAgICAgICAgICAgcmV0dXJuIGFkZHI7CisgICAgfQor
CisgICAgcVdhcm5pbmcoKSA8PCAiR3JhcGhpY3NDb250ZXh0M0Q6IG5vdCBmb3VuZCIgPDwgcHJv
YzsKKworICAgIG1fdmFsaWQgPSBmYWxzZTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKK3sKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzKSk7CisgICAgcmV0dXJuIGNv
bnRleHQtPm1faW50ZXJuYWwgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7Cit9CisKK0dyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRycykKKyAgICA6IG1faW50ZXJuYWwobmV3IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwo
YXR0cnMpKQoreworICAgIGlmICghbV9pbnRlcm5hbC0+aXNWYWxpZCgpKSAKKyAgICAgICAgbV9p
bnRlcm5hbCA9IDA7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0Qo
KQoreworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpw
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV9n
bFdpZGdldDsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1UZXh0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV90ZXh0dXJlOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CisgICAgSW1hZ2VCdWZm
ZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKworICAgIG1faW50ZXJuYWwtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1faW50ZXJuYWwt
Pm1fbWFpbkZibyk7CisKKyAgICBnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1f
Y3VycmVudEhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgbV9pbnRlcm5hbC0+bV9w
aXhlbHMuYml0cygpKTsKKworICAgIFFQYWludGVyKiBwID0gaW1hZ2VCdWZmZXItPmNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgcC0+ZHJhd0ltYWdlKDAsIDAsIG1faW50ZXJuYWwt
Pm1fcGl4ZWxzLnRyYW5zZm9ybWVkKFFNYXRyaXgoKS5yb3RhdGUoMTgwKSkpOworCisgICAgbV9p
bnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9pbnRlcm5hbC0+bV9jdXJyZW50RmJvKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZW5kUGFpbnQoKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3
aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoKCh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCkg
JiYgKGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpKSB8fCAoIW1faW50ZXJuYWwpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKKyAgICBtX2N1cnJl
bnRIZWlnaHQgPSBoZWlnaHQ7CisKKyAgICBtX2ludGVybmFsLT5tX3BpeGVscyA9IFFJbWFnZSht
X2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOwor
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm5hbC0+bV90ZXh0dXJlKTsKKyAgICBnbFRl
eEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCAwKTsKKyAgIAorICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1faW50ZXJuYWwtPm1fbWFpbkZibyk7CisgICAgbV9pbnRl
cm5hbC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBt
X2ludGVybmFsLT5tX2RlcHRoQnVmZmVyKTsKKyNpZmRlZiBHTF9ERVBUSF9DT01QT05FTlQyNAor
ICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
R0xfREVQVEhfQ09NUE9ORU5UMjQsIHdpZHRoLCBoZWlnaHQpOworI2Vsc2UKKyAgICByZW5kZXJi
dWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX0RFUFRIX0NP
TVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgorICAgIG1faW50ZXJuYWwtPmJpbmRS
ZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisgICAgCisg
ICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRV
UkVfMkQsIG1faW50ZXJuYWwtPm1fdGV4dHVyZSwgMCk7CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9pbnRlcm5hbC0+bV9kZXB0aEJ1ZmZlcik7CisKKyAgICBHTGVudW0gc3RhdHVzID0g
bV9pbnRlcm5hbC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0NPTVBMRVRFKSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4dDNE
OjpyZXNoYXBlOiBJbnZhbGlkIEZCTyIgPDwgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpOworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IH0KKworICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisgICAgZ2xGbHVzaCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcg
dGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRl
cikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5hdHRh
Y2hTaGFkZXIoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIChHTHVpbnQpIHNoYWRlci0+b2Jq
ZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YmluZEF0dHJpYkxvY2F0aW9uKChH
THVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdl
dCwgV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIg
PyAoR0x1aW50KSBidWZmZXItPm9iamVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1
ZmZlciogYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9pbnRlcm5hbC0+bV9jdXJyZW50RmJvID0gKGJ1ZmZlciAmJiBidWZmZXItPm9i
amVjdCgpKSA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiBtX2ludGVybmFsLT5tX21haW5G
Ym87CisgICAgbV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgbV9pbnRlcm5hbC0+
bV9jdXJyZW50RmJvKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1
ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZl
cikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZmZXIgPyAoR0x1aW50
KSByZW5kZXJidWZmZXItPm9iamVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1
cmUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSA/IChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgp
IDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IoZG91YmxlIHJl
ZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xCbGVuZENvbG9yKHN0YXRp
Y19jYXN0PGZsb2F0PihyZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW4pLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQmxlbmRFcXVh
dGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNl
cGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2ZhY3RvciwgdW5z
aWduZWQgbG9uZyBkZmFjdG9yKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgZ2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9ICAgICAgIAor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25n
IHNyY1JHQiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3JjQWxwaGEsIHVu
c2lnbmVkIGxvbmcgZHN0QWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRz
dFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVuc2lnbmVkIGxvbmcg
dXNhZ2UpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBX
ZWJHTEFycmF5KiBhcnJheSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBpZiAoIWFycmF5
IHx8ICFhcnJheS0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRh
dGEodGFyZ2V0LCBhcnJheS0+Ynl0ZUxlbmd0aCgpLCBhcnJheS0+YmFzZUFkZHJlc3MoKSwgdXNh
Z2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgV2ViR0xBcnJheSogYXJyYXkpCit7CisgICAgaWYg
KCFhcnJheSB8fCAhYXJyYXktPmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5i
dWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheS0+Ynl0ZUxlbmd0aCgpLCBhcnJheS0+
YmFzZUFkZHJlc3MoKSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckNvbG9yKGRvdWJsZSByLCBkb3VibGUgZywgZG91YmxlIGIsIGRvdWJsZSBhKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDbGVh
ckNvbG9yKHN0YXRpY19jYXN0PGZsb2F0PihyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGcpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYiksIHN0YXRpY19jYXN0PGZsb2F0PihhKSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQ2xlYXIobWFzayk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisjaWYgZGVmaW5lZChRVF9P
UEVOR0xfRVNfMikKKyAgICBnbENsZWFyRGVwdGhmKGRlcHRoKTsKKyNlbHNlCisgICAgZ2xDbGVh
ckRlcHRoKGRlcHRoKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVh
clN0ZW5jaWwobG9uZyBzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgZ2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhh
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xD
b2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgQVNTRVJU
KHNoYWRlcik7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT5jb21waWxlU2hhZGVyKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25n
IHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4
LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25n
IGJvcmRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNv
cHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhv
ZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDdWxsRmFjZShtb2RlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYykKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRGVwdGhG
dW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soYm9vbCBm
bGFnKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
Z2xEZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFu
Z2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgZ2xE
ZXB0aFJhbmdlZih6TmVhciwgekZhcik7CisjZWxzZQorICAgIGdsRGVwdGhSYW5nZSh6TmVhciwg
ekZhcik7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVy
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBBU1NF
UlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZXRhY2hTaGFkZXIoKEdMdWlu
dCkgcHJvZ3JhbS0+b2JqZWN0KCksIChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xEaXNhYmxlKGNh
cCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyh1bnNpZ25lZCBs
b25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNv
dW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKHVuc2lnbmVk
IGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25n
IG9mZnNldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIGdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjplbmFibGUodW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEVuYWJsZShjYXApOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25n
IGluZGV4KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9pbnRlcm5hbC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xGaW5pc2goKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Zmx1c2goKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgZ2xGbHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBh
dHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJi
dWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0
YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIgPyAoR0x1aW50KSBidWZmZXItPm9i
amVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVu
c2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIGxvbmcgbGV2ZWwp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdl
dCwgdGV4dHVyZSA/IChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpIDogMCwgbGV2ZWwpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xGcm9u
dEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFw
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKK30K
KworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBp
ZiAoIXByb2dyYW0tPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFM
SURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50IG1heExlbmd0aDsKKyAg
ICBtX2ludGVybmFsLT5nZXRQcm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1aW50Pihwcm9ncmFtLT5v
YmplY3QoKSksIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heExlbmd0aCk7CisK
KyAgICBHTGNoYXIgbmFtZVttYXhMZW5ndGhdOyAKKyAgICBHTHNpemVpIG5hbWVMZW5ndGg7Cisg
ICAgR0xpbnQgc2l6ZTsKKyAgICBHTGVudW0gdHlwZTsKKworICAgIG1faW50ZXJuYWwtPmdldEFj
dGl2ZUF0dHJpYihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgaW5kZXgs
IG1heExlbmd0aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisKKyAgICBpZiAo
IW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluZm8ubmFtZSA9IFN0
cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8u
c2l6ZSA9IHNpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25l
ZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbS0+b2Jq
ZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbWF4TGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdl
dFByb2dyYW1pdihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgR0xfQUNU
SVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heExlbmd0aCk7CisKKyAgICBHTGNoYXIgbmFtZVtt
YXhMZW5ndGhdOworICAgIEdMc2l6ZWkgbmFtZUxlbmd0aDsKKyAgICBHTGludCBzaXplOworICAg
IEdMZW51bSB0eXBlOworCisgICAgbV9pbnRlcm5hbC0+Z2V0QWN0aXZlVW5pZm9ybShzdGF0aWNf
Y2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgaW5kZXgsIG1heExlbmd0aCwgJm5hbWVM
ZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisKKyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLCBuYW1lTGVu
Z3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2Nh
dGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBp
ZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAtMTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRBdHRy
aWJMb2NhdGlvbigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbmFtZS51dGY4KCkuZGF0YSgp
KTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV9hdHRy
czsKK30KKwordW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQorewor
ICAgIGlmIChtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7CisgICAg
ICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBpdGVyID0gbV9pbnRlcm5h
bC0+bV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBlcnIg
PSAqaXRlcjsKKyAgICAgICAgbV9pbnRlcm5hbC0+bV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0
ZXIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsR2V0RXJyb3IoKTsKK30KKworU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIFN0
cmluZygoY29uc3QgY2hhciopIGdsR2V0U3RyaW5nKG5hbWUpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6aGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2Rl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xI
aW50KHRhcmdldCwgbW9kZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVy
KFdlYkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIHJldHVybiBtX2ludGVybmFsLT5pc0J1ZmZlcigoR0x1aW50KSBidWZmZXItPm9iamVj
dCgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKHVuc2lnbmVkIGxv
bmcgY2FwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgcmV0dXJuIGdsSXNFbmFibGVkKGNhcCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgaWYg
KCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlz
RnJhbWVidWZmZXIoKEdMdWludCkgZnJhbWVidWZmZXItPm9iamVjdCgpKTsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAg
ICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5p
c1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVy
KQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4g
bV9pbnRlcm5hbC0+aXNSZW5kZXJidWZmZXIoKEdMdWludCkgcmVuZGVyYnVmZmVyLT5vYmplY3Qo
KSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBz
aGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBt
X2ludGVybmFsLT5pc1NoYWRlcigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpKTsKK30KKworYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3sK
KyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBnbElzVGV4dHVy
ZSgoR0x1aW50KSB0ZXh0dXJlLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmVXaWR0aChkb3VibGUgd2lkdGgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbExpbmVXaWR0aChzdGF0aWNfY2FzdDxmbG9hdD4od2lk
dGgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0oV2ViR0xQcm9n
cmFtKiBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmxpbmtQcm9ncmFtKChH
THVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsUGl4ZWxTdG9yZWkocG5h
bWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChk
b3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFBvbHlnb25PZmZzZXQoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGZhY3RvciksIHN0YXRpY19jYXN0PGZsb2F0Pih1bml0cykpOworfQorCitQYXNzUmVmUHRyPFdl
YkdMQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1
bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBm
b3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIAorICAgIGlmICh0eXBlICE9IEdMX1VOU0lHTkVEX0JZVEUg
fHwgZm9ybWF0ICE9IEdMX1JHQkEpCisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBS
ZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gYXJyYXkgPSBXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5OjpjcmVhdGUod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICBnbFJlYWRQaXhlbHMoeCwgeSwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAoR0x2b2lkKikgYXJyYXktPmRhdGEoKSk7Cisg
ICAgcmV0dXJuIGFycmF5OyAgICAKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJh
Z2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU2FtcGxlQ292ZXJhZ2Uoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHZhbHVlKSwgaW52ZXJ0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3Nv
cihsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgLy8gRm9yY2UgdG8gR0xTTCAxLjA6CisgICAgLy8g
aHR0cHM6Ly9jdnMua2hyb25vcy5vcmcvc3ZuL3JlcG9zL3JlZ2lzdHJ5L3RydW5rL3B1YmxpYy93
ZWJnbC9kb2Mvc3BlYy9XZWJHTC1zcGVjLmh0bWwjNC40CisgICAgLy8gRklYTUU6IExpbmVzIGJl
Z2lubmluZyB3aXRoICIjdmVyc2lvbiIgc2hvdWxkIGJlIHN0cmlwcGVkIG91dC4KKworICAgIFN0
cmluZyBwcmVwYXJlZDsKKyAgIAorICAgIHByZXBhcmVkLmFwcGVuZCgiI3ZlcnNpb24gMTAwXG4i
KTsKKyNpZmRlZiBRVF9PUEVOR0xfRVNfMgorICAgIHByZXBhcmVkLmFwcGVuZCgicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7XG4iKTsKKyNlbmRpZgorICAgIHByZXBhcmVkLmFwcGVuZChzdHJpbmcp
OworCisgICAgY29uc3QgQ1N0cmluZyYgY3MgPSBwcmVwYXJlZC51dGY4KCk7CisgICAgY29uc3Qg
Y2hhciogcyA9IGNzLmRhdGEoKTsKKyAgICBpbnQgbGVuZ3RoID0gcHJlcGFyZWQubGVuZ3RoKCk7
CisgICAgbV9pbnRlcm5hbC0+c2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCks
IDEsICZzLCAmbGVuZ3RoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1
bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xTdGVuY2ls
RnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVu
Y2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmdW5jLCBs
b25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShm
YWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVu
Y2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwg
dW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNr
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKHVuc2lnbmVkIGxvbmcg
ZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxP
cFNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25l
ZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbE9wU2VwYXJh
dGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dGV4UGFyYW1ldGVyZih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBmbG9hdCB2
YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IGdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaSh1bnNpZ25lZCB0
YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFt
ZSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0xZihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xZihs
b2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KGxv
bmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMWZ2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMmYo
bG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0y
ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0y
ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT51bmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNp
emUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X2ludGVybmFsLT51bmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxv
YXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00Zihsb2NhdGlvbiwgdjAs
IHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KGxv
bmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtNGZ2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0xaShsb25nIGxvY2F0aW9uLCBpbnQgdjApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMWkobG9jYXRpb24sIHYw
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9u
LCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUs
IGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKGxvbmcgbG9j
YXRpb24sIGludCB2MCwgaW50IHYxKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24s
IGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2kobG9uZyBsb2Nh
dGlvbiwgaW50IHYwLCBpbnQgdjEsIGludCB2MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zaShsb2NhdGlvbiwg
djAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYobG9u
ZyBsb2NhdGlvbiwgaW50KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtM2l2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00
aShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyLCBpbnQgdjMpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51
bmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPnVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5z
cG9zZSwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXgyZnYobG9j
YXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9h
dCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6
ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiBhcnJheSwg
aW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bv
c2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShXZWJH
TFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIAorICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dXNl
UHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAg
QVNTRVJUKHByb2dyYW0pOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmFsaWRhdGVQcm9ncmFtKChHTHVpbnQpIHByb2dy
YW0tPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
MWYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjFmKGlu
ZHgsIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KHVu
c2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFycmF5KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMWZ2KGlu
ZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRy
aWIyZihpbmR4LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhB
dHRyaWIyZnYoaW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQg
djIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIzZihpbmR4LCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxv
YXQqIGFycmF5KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliM2Z2KGluZHgsIGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmR4LCBm
bG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJp
YjRmKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFycmF5KQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
dmVydGV4QXR0cmliNGZ2KGluZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBzaXplLCBpbnQg
dHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9u
ZyBvZmZzZXQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5v
cm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50
cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQo
bG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xW
aWV3cG9ydChzdGF0aWNfY2FzdDxHTGludD4oeCksIHN0YXRpY19jYXN0PEdMaW50Pih5KSwgc3Rh
dGljX2Nhc3Q8R0xzaXplaT4od2lkdGgpLCBzdGF0aWNfY2FzdDxHTHNpemVpPihoZWlnaHQpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBw
bmFtZSwgdW5zaWduZWQgY2hhciogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0QnVm
ZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRGbG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xHZXRG
bG9hdHYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJu
YWwtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVu
dCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdl
cnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVl
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFBy
b2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgcG5hbWUsIHZhbHVlKTsKK30KKwor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0q
IHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KworICAgIEdMaW50IGxlbmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtaXYoKEdMdWlu
dCkgcHJvZ3JhbS0+b2JqZWN0KCksIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisKKyAg
ICBHTHNpemVpIHNpemU7CisKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxv
YyhsZW5ndGgpOworICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgbV9p
bnRlcm5hbC0+Z2V0UHJvZ3JhbUluZm9Mb2coKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIGxl
bmd0aCwgJnNpemUsIGluZm8pOworCisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKKyAgICBmYXN0
RnJlZShpbmZvKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRTaGFkZXJpdihXZWJHTFNoYWRlciogc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1l
LCBpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVyaXYoKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSwgcG5hbWUsIHZhbHVlKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50IGxl
bmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVj
dCgpLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworCisgICAgR0xzaXplaSBzaXplOwor
ICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CisgICAgaWYg
KCFpbmZvKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBtX2ludGVybmFsLT5nZXRTaGFkZXJJ
bmZvTG9nKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOwor
CisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZvKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291
cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50IGxlbmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRT
aGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBHTF9TSEFERVJfU09VUkNFX0xFTkdU
SCwgJmxlbmd0aCk7CisKKyAgICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFyKiBpbmZvID0gKEdM
Y2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoIWluZm8pCisgICAgICAgIHJldHVy
biAiIjsKKworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlclNvdXJjZSgoR0x1aW50KSBzaGFkZXIt
Pm9iamVjdCgpLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKKworICAgIFN0cmluZyByZXN1bHQoaW5m
byk7CisgICAgZmFzdEZyZWUoaW5mbyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJn
ZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBh
cmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQq
IHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxv
bmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1mdigoR0x1aW50KSBw
cm9ncmFtLT5vYmplY3QoKSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlv
biwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmpl
Y3QoKSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKworbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRVbmlmb3JtTG9j
YXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxv
bmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFZl
cnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBs
b25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBu
YW1lLCB2YWx1ZSk7Cit9CisKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJp
Yk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgCisgICAgdm9pZCog
cG9pbnRlcjsKKyAgICBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwg
cG5hbWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxsb25nPihwb2lu
dGVyKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1hdCwg
dW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQoreworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5
cGUsIHBpeGVscyk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6
dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBJbWFnZSogaW1hZ2Us
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK3sKKyAgICBBU1NFUlQoaW1hZ2Up
OworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIEdMdWludCBmb3JtYXQ7CisgICAgR0x1
aW50IGludGVybmFsRm9ybWF0OworCisgICAgaWYgKCFleHRyYWN0SW1hZ2VEYXRhKGltYWdlLCBm
bGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgaW1hZ2VEYXRhLCAmZm9ybWF0LCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmludGVybmFsRm9ybWF0KSkgeworICAgICAgICBxV2FybmluZygpIDw8
ICJHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRDogY291bGQgbm90IGV4dHJhY3QgSW1hZ2Ug
ZGF0YSI7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBnbFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0
KCksIAorICAgICAgICAgICAgICAgICAwLCBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdl
RGF0YS5kYXRhKCkpOworCisgICAgcmV0dXJuIDA7Cit9CisgICAgCitpbnQgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAg
Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhKQoreworICAgIEFTU0VSVChpbWFnZSk7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIEdMdWludCBmb3JtYXQ7CisgICAgR0x1aW50IGlu
dGVybmFsRm9ybWF0OworCisgICAgaWYgKCFleHRyYWN0SW1hZ2VEYXRhKGltYWdlLCBmbGlwWSwg
cHJlbXVsdGlwbHlBbHBoYSwgaW1hZ2VEYXRhLCAmZm9ybWF0LCAmaW50ZXJuYWxGb3JtYXQpKSB7
CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJE
OiBjb3VsZCBub3QgZXh0cmFjdCBJbWFnZSBkYXRhIjsKKyAgICAgICAgcmV0dXJuIC0xOworICAg
IH0KKworICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCBpbWFn
ZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0
LCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKKworICAgIHJldHVybiAwOwor
fQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIEdMdWludCBvOworICAg
IG1faW50ZXJuYWwtPmdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit1bnNp
Z25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgR0x1aW50IG87CisgICAgbV9p
bnRlcm5hbC0+Z2VuRnJhbWVidWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5z
aWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNy
ZWF0ZVByb2dyYW0oKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJl
bmRlcmJ1ZmZlcigpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBHTHVpbnQgbzsKKyAgICBtX2ludGVybmFsLT5nZW5SZW5kZXJidWZmZXJzKDEsICZv
KTsKKyAgICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlU2hhZGVyKCh0
eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhf
U0hBREVSKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUo
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgR0x1
aW50IG87CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT5kZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZUZy
YW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZWxldGVQcm9ncmFtKHVuc2lnbmVkIHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVQcm9ncmFtKHBy
b2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIo
dW5zaWduZWQgcmVuZGVyYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVu
ZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKHVu
c2lnbmVkIHNoYWRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVRleHR1
cmVzKDEsICZ0ZXh0dXJlKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRl
cyhpbnQgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdMX0JZVEU6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoR0xieXRlKTsKKyAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6
CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1Ynl0ZSk7CisgICAgY2FzZSBHTF9TSE9SVDoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihHTHNob3J0KTsKKyAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdXNob3J0KTsKKyAgICBjYXNlIEdMX0lOVDoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7CisgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3Io
dW5zaWduZWQgbG9uZyBlcnJvcikKK3sKKyAgICBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9y
cy5hZGQoZXJyb3IpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEo
SW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiYgb3V0cHV0VmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sKiBoYXNBbHBoYUNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQWxwaGFPcCogbmVlZGVkQWxwaGFPcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGZvcm1hdCkKK3sKKyAgICBRSW1hZ2U6
OkZvcm1hdCBpbWFnZUZvcm1hdCA9ICghcHJlbXVsdGlwbHlBbHBoYSkgPyAKKyAgICAgICAgUUlt
YWdlOjpGb3JtYXRfQVJHQjMyIDoKKyAgICAgICAgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11
bHRpcGxpZWQ7CisgCisgICAgUVBpeG1hcCogbmF0aXZlUGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7IAorCisgICAgKmhhc0FscGhhQ2hhbm5lbCA9IHRydWU7Cisg
ICAgKm5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7CisgICAgKmZvcm1hdCA9IEdMX1JH
QkE7CisKKyAgICBRSW1hZ2UgbmF0aXZlSW1hZ2UgPSBuYXRpdmVQaXhtYXAtPnRvSW1hZ2UoKS5j
b252ZXJ0VG9Gb3JtYXQoaW1hZ2VGb3JtYXQpOworICAgIG91dHB1dFZlY3Rvci5hcHBlbmQobmF0
aXZlSW1hZ2UuYml0cygpLCBuYXRpdmVJbWFnZS5ieXRlQ291bnQoKSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYnNldHRp
bmdzLmNwcAppbmRleCBkNjBmMDljLi5lNmZkZjYxIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBp
L3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCkBA
IC0xNTgsNiArMTU4LDEzIEBAIHZvaWQgUVdlYlNldHRpbmdzUHJpdmF0ZTo6YXBwbHkoKQogCiAg
ICAgICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh2YWx1ZSk7
CiAjZW5kaWYKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0
ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbG9iYWwtPmF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpXZWJH
TEVuYWJsZWQpKTsKKworICAgICAgICBzZXR0aW5ncy0+c2V0V2ViR0xFbmFibGVkKHZhbHVlKTsK
KyNlbmRpZgorIAogICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdz
OjpKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OkphdmFzY3Jp
cHRDYW5PcGVuV2luZG93cykpOwogICAgICAgICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdENhbk9w
ZW5XaW5kb3dzQXV0b21hdGljYWxseSh2YWx1ZSk7CkBAIC00MDEsNiArNDA4LDcgQEAgUVdlYlNl
dHRpbmdzOjpRV2ViU2V0dGluZ3MoKQogICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0
aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscywgZmFsc2UpOwogICAgIGQtPmF0
dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzRmlsZVVy
bHMsIHRydWUpOwogICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIGZhbHNlKTsKKyAgICBkLT5hdHRyaWJ1dGVzLmluc2Vy
dChRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgZmFsc2UpOwogICAgIGQtPm9mZmxpbmVTdG9y
YWdlRGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAgIGQtPmRlZmF1bHRUZXh0RW5j
b2RpbmcgPSBRTGF0aW4xU3RyaW5nKCJpc28tODg1OS0xIik7CiB9CmRpZmYgLS1naXQgYS9XZWJL
aXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaApp
bmRleCBiMWY1Y2YyLi4yOWMwMWI2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0
aW5ncy5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgKQEAgLTcwLDcgKzcwLDgg
QEAgcHVibGljOgogICAgICAgICBMb2NhbENvbnRlbnRDYW5BY2Nlc3NGaWxlVXJscywKICAgICAg
ICAgRG5zUHJlZmV0Y2hFbmFibGVkLAogICAgICAgICBYU1NBdWRpdG9yRW5hYmxlZCwKLSAgICAg
ICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQKKyAgICAgICAgQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0VuYWJsZWQsCisgICAgICAgIFdlYkdMRW5hYmxlZAogICAgIH07CiAgICAgZW51bSBX
ZWJHcmFwaGljIHsKICAgICAgICAgTWlzc2luZ0ltYWdlR3JhcGhpYywKZGlmZiAtLWdpdCBhL1dl
YktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDJkMWE0ODMuLjY1
OGRjMzQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEwLTAyLTIzICBKYXJra28gU2Fra2luZW4gIDxq
YXJra28uc2Fra2luZW5AdGlldG8uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFF0IFdlYkdMIHN1cHBvcnQKKworICAgICAgICBBZGRzIFdlYkdM
IHN1cHBvcnQgdG8gdGhlIFFXZWJTZXR0aW5ncyBBUEkgYW5kIGFkZHMgCisgICAgICAgICctLXdl
YmdsJyBwYXJhbWV0ZXIgdG8gUUdWTGF1bmNoZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTE1MworCisgICAgICAgICogQXBpL3F3ZWJzZXR0aW5n
cy5jcHA6CisgICAgICAgIChRV2ViU2V0dGluZ3NQcml2YXRlOjphcHBseSk6CisgICAgICAgIChR
V2ViU2V0dGluZ3M6OlFXZWJTZXR0aW5ncyk6CisgICAgICAgICogQXBpL3F3ZWJzZXR0aW5ncy5o
OgorICAgICAgICAqIFFHVkxhdW5jaGVyL21haW4uY3BwOgorICAgICAgICAobWFpbik6CisKIDIw
MTAtMDItMjMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1FHVkxhdW5j
aGVyL21haW4uY3BwIGIvV2ViS2l0L3F0L1FHVkxhdW5jaGVyL21haW4uY3BwCmluZGV4IDQ0OGI0
YjAuLjMwN2UxMTggMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9RR1ZMYXVuY2hlci9tYWluLmNwcAor
KysgYi9XZWJLaXQvcXQvUUdWTGF1bmNoZXIvbWFpbi5jcHAKQEAgLTUyMSw2ICs1MjEsOCBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHVybCA9IGFyZ3MuYXQoMSk7
CiAgICAgaWYgKGFyZ3MuY29udGFpbnMoIi0tY29tcG9zaXRpbmciKSkKICAgICAgICAgUVdlYlNl
dHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgdHJ1ZSk7CisgICAgaWYgKGFyZ3MuY29udGFpbnMo
Ii0td2ViZ2wiKSkKKyAgICAgICAgUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpLT5zZXRB
dHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsIHRydWUpOwogCiAgICAgTWFpbldp
bmRvdyogd2luZG93ID0gbmV3IE1haW5XaW5kb3c7CiAgICAgd2luZG93LT5sb2FkKHVybCk7CmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cK
aW5kZXggZTA2NjUxOS4uNzgwMDI1ZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTAyLTIz
ICBKYXJra28gU2Fra2luZW4gIDxqYXJra28uc2Fra2luZW5AdGlldG8uY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFF0IFdlYkdMIHN1cHBvcnQK
KworICAgICAgICBBZGRzIFdlYkdMIHN1cHBvcnQgdG8gUXRMYXVuY2hlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MTUzCisKKyAgICAgICAgKiBR
dExhdW5jaGVyL21haW4uY3BwOgorICAgICAgICAoTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZVdlYkdM
KToKKyAgICAgICAgKExhdW5jaGVyV2luZG93OjpzZXR1cFVJKToKKwogMjAxMC0wMi0yMyAgTGFz
emxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9RdExhdW5jaGVyL21haW4uY3BwIGIvV2ViS2l0VG9vbHMvUXRMYXVuY2hlci9tYWluLmNwcApp
bmRleCAxMjAzY2U3Li5iOGE2NzFiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9RdExhdW5jaGVy
L21haW4uY3BwCisrKyBiL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAKQEAgLTExNiw2
ICsxMTYsNyBAQCBwcm90ZWN0ZWQgc2xvdHM6CiAKICAgICB2b2lkIHNldFRvdWNoTW9ja2luZyhi
b29sIG9uKTsKICAgICB2b2lkIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCB0b2dn
bGUpOworICAgIHZvaWQgdG9nZ2xlV2ViR0woYm9vbCB0b2dnbGUpOwogICAgIHZvaWQgaW5pdGlh
bGl6ZVZpZXcoYm9vbCB1c2VHcmFwaGljc1ZpZXcgPSBmYWxzZSk7CiAKIHB1YmxpYyBzbG90czoK
QEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZyhib29sIHRvZ2dsZSkKICAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0
dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCB0b2dn
bGUpOwogfQogCit2b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVXZWJHTChib29sIHRvZ2dsZSkK
K3sKKyAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Oldl
YkdMRW5hYmxlZCwgdG9nZ2xlKTsKK30KKwogdm9pZCBMYXVuY2hlcldpbmRvdzo6aW5pdGlhbGl6
ZVZpZXcoYm9vbCB1c2VHcmFwaGljc1ZpZXcpCiB7CiAgICAgZGVsZXRlIG1fdmlldzsKQEAgLTU1
NCw2ICs1NjAsMTAgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6c2V0dXBVSSgpCiAgICAgdG9nZ2xl
R3JhcGhpY3NWaWV3LT5zZXRDaGVja2FibGUodHJ1ZSk7CiAgICAgdG9nZ2xlR3JhcGhpY3NWaWV3
LT5zZXRDaGVja2VkKGZhbHNlKTsKIAorICAgIFFBY3Rpb24qIHRvZ2dsZVdlYkdMID0gdG9vbHNN
ZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSBXZWJHTCIsIHRoaXMsIFNMT1QodG9nZ2xlV2ViR0woYm9v
bCkpKTsKKyAgICB0b2dnbGVXZWJHTC0+c2V0Q2hlY2thYmxlKHRydWUpOworICAgIHRvZ2dsZVdl
YkdMLT5zZXRDaGVja2VkKGZhbHNlKTsKKwogICAgIFFBY3Rpb24qIHRvZ2dsZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmcgPSBncmFwaGljc1ZpZXdNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSBBY2NlbGVy
YXRlZCBDb21wb3NpdGluZyIsIHRoaXMsIFNMT1QodG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Zyhib29sKSkpOwogICAgIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmctPnNldENoZWNrYWJs
ZSh0cnVlKTsKICAgICB0b2dnbGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nLT5zZXRDaGVja2VkKGZh
bHNlKTsKQEAgLTU2OSw2ICs1NzksOCBAQCB2b2lkIExhdW5jaGVyV2luZG93OjpzZXR1cFVJKCkK
ICAgICBmbGlwWUFuaW1hdGVkID0gZ3JhcGhpY3NWaWV3TWVudS0+YWRkQWN0aW9uKCJBbmltYXRl
ZCBZLUZsaXAiKTsKICAgICBmbGlwWUFuaW1hdGVkLT5jb25uZWN0KHRvZ2dsZUdyYXBoaWNzVmll
dywgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpKTsKICAgICBm
bGlwWUFuaW1hdGVkLT5zZXRFbmFibGVkKGZhbHNlKTsKKworCiB9CiAKIFFXZWJQYWdlKiBXZWJQ
YWdlOjpjcmVhdGVXaW5kb3coUVdlYlBhZ2U6OldlYldpbmRvd1R5cGUgdHlwZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49297</attachid>
            <date>2010-02-23 08:58:57 -0800</date>
            <delta_ts>2010-02-23 10:32:57 -0800</delta_ts>
            <desc>Qt WebGL support</desc>
            <filename>qt-webgl-support-6.diff</filename>
            <type>text/plain</type>
            <size>85800</size>
            <attacher name="Jarkko Sakkinen">jarkko.sakkinen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjA2ZGIxZS4uMmQxOGE0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzEgQEAKKzIwMTAtMDItMjMgIEphcmtrbyBTYWtr
aW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXQgV2ViR0wgc3VwcG9ydAorCisgICAgICAgIEFk
ZHMgR3JhcGhpY3NDb250ZXh0M0QgUXRXZWJLaXQgaW1wbGVtZW50YXRpb24uCisJCWh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTE1MworCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc1Zh
bGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvY0FkZHJlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Ymlu
ZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFy
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjb2xvck1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNv
cHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5
VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3Vs
bEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZs
dXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZy
b250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVN
aXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0
dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5p
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjppc1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omlz
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1No
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6c3RlbmNpbE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0
ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBh
cmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFt
ZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1
c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0
ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIy
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisKIDIwMTAtMDItMjMgIFRvbnkgQ2hhbmcgIDx0b255QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUucHJpIGIvV2ViQ29yZS9XZWJDb3JlLnByaQppbmRleCAyN2YxYmI2Li5mYzc5Zjhk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5w
cmkKQEAgLTI4Nyw4ICsyODcsMTcgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICBodG1sL2NhbnZh
cy9DYW52YXNQYXR0ZXJuLmlkbCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5pZGwgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwg
XAorICAgIGh0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwgXAorICAgIGh0bWwvY2FudmFz
L1dlYkdMQnVmZmVyLmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaWRsIFwKKyAgICBodG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1
ZmZlci5pZGwgXAogICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgXAor
ICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xT
aG9ydEFycmF5LmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmlkbCBcCisgICAg
aHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsIFwKICAgICBodG1sL2NhbnZhcy9X
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25l
ZEludEFycmF5LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXku
aWRsIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUu
cHJvCmluZGV4IGM2MjUyMjQuLjhjYzk2MWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjY4NSw2ICsyNjg1LDg3IEBAIFNPVVJD
RVMgKz0gXAogfQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfM0RfQ0FOVkFTPTEpIHsK
K1FUICs9IG9wZW5nbAorSEVBREVSUyArPSBcCisJYmluZGluZ3MvanMvSlNXZWJHTEFycmF5QnVm
ZmVyQ29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEFycmF5SGVscGVyLmggXAor
CWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9q
cy9KU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xJ
bnRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q29u
c3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3Ry
dWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rv
ci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3Iu
aCBcCisJaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCBcCisJaHRtbC9jYW52
YXMvQ2FudmFzT2JqZWN0LmggXAorCWh0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5oIFwKKwlo
dG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXku
aCBcCisJaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xCeXRl
QXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIFwKKwlodG1s
L2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEdldEluZm8uaCBcCisJaHRtbC9jYW52YXMvV2ViR0xJ
bnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaCBcCisJaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJidWZmZXIuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmggXAorCWh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdMU2hv
cnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaCBcCisJaHRtbC9jYW52YXMv
V2ViR0xVbmlmb3JtTG9jYXRpb24uaCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVB
cnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaCBcCisJaHRtbC9j
YW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaCAKKworU09VUkNFUyArPSBcCisJYmluZGluZ3MvanMvSlNXZWJH
TEFycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlD
dXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IuY3Bw
IFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3Mv
anMvSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2Vi
R0xGbG9hdEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29u
c3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMSW50QXJyYXlDdXN0b20uY3BwIFwK
KwliaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgXAorCWJpbmRp
bmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9K
U1dlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJy
YXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEludEFycmF5
Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0
cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3Rv
bS5jcHAgXAorCWh0bWwvY2FudmFzL0NhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCBcCisgICAg
aHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xBcnJheUJ1
ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9X
ZWJHTEJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5LmNwcCBcCisJaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdM
RmxvYXRBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwIFwKKwlo
dG1sL2NhbnZhcy9XZWJHTEdldEluZm8uY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTEludEFycmF5
LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJidWZmZXIuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdM
U2hvcnRBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAgXAorCWh0bWwv
Y2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNp
Z25lZEJ5dGVBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5j
cHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcCBcCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBcCisKK30KKworCiBpbmNsdWRlKCQkUFdE
Ly4uL1dlYktpdC9xdC9BcGkvaGVhZGVycy5wcmkpCiBpbmNsdWRlKC4uL2luY2x1ZGUvUXRXZWJL
aXQvY2xhc3NoZWFkZXJzLnByaSkKIEhFQURFUlMgKz0gJCRXRUJLSVRfQVBJX0hFQURFUlMKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAwYTQx
ZGM2Li5jZjFkZjcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCkBAIC00NCw2ICs0NCwxMyBAQCB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0Q7CiBjb25zdCAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBOdWxsUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCA9IDA7CiB0eXBlZGVmIEdMdWludCBQbGF0Zm9ybTNET2JqZWN0
OwogY29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7CisjZWxp
ZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRdE9wZW5HTC9RdE9wZW5HTD4KKwordHlwZWRlZiB2
b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOworY29uc3QgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgPSAwOwordHlwZWRlZiBpbnQg
UGxhdGZvcm0zRE9iamVjdDsKK2NvbnN0IFBsYXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3JtM0RP
YmplY3QgPSAwOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RDsKIGNvbnN0ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIE51bGxQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEID0gMDsKQEAgLTczLDcgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IH07CiAKICAgICAvLyBGSVhNRTogaWRlYWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBs
YXRmb3Jtcy4KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpZiBQTEFURk9STShDSFJPTUlVTSkg
fHwgUExBVEZPUk0oUVQpCiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICNl
bmRpZgogCkBAIC00MDksNiArNDE2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VsaWYgUExB
VEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0OwogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBs
YXRmb3JtVGV4dHVyZSgpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgICAgIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpOworICAgICAg
ICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OwogI2Vsc2UKICAgICAg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkg
Y29uc3QgeyByZXR1cm4gTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7IH0KICAgICAgICAg
UGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBOdWxsUGxh
dGZvcm0zRE9iamVjdDsgfQpAQCAtNzA0LDcgKzcxNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICNlbmRpZiAgICAgICAgCiAKICAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgdGhpcyB3b3VsZCBi
ZSB1c2VkIG9uIGFsbCBwbGF0Zm9ybXMuCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaWYgUExB
VEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKFFUKQogICAgICAgICBmcmllbmQgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw+IG1faW50ZXJuYWw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjdjMmMwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC0wLDAgKzEsMTcxOSBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgVGlldG8gQ29ycG9yYXRpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgICAKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAg
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5j
bHVkZSAiQ2FudmFzT2JqZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZvLmgiCisj
aW5jbHVkZSAiV2ViR0xBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVk
ZSAiV2ViR0xGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIldlYkdMSW50QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNs
dWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dC5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgi
CisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisjaWYgZGVmaW5lZCAoUVRfT1BFTkdMX0VTXzIpICYmICFkZWZpbmVkKEdMY2hhcikKK3R5
cGVkZWYgY2hhciBHTGNoYXI7CisjZW5kaWYKKworI2lmbmRlZiBBUElFTlRSWQorI2RlZmluZSBB
UElFTlRSWQorI2VuZGlmCisKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQWN0aXZlVGV4dHVy
ZVR5cGUpIChHTGVudW0pOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xBdHRhY2hTaGFkZXJU
eXBlKSAoR0x1aW50LCBHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCaW5kQXR0
cmliTG9jYXRpb25UeXBlKSAoR0x1aW50LCBHTHVpbnQsIGNvbnN0IGNoYXIgKik7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZKiBnbEJpbmRCdWZmZXJUeXBlKSAoR0xlbnVtLCBHTHVpbnQpOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCaW5kRnJhbWVidWZmZXJUeXBlKSAoR0xlbnVtIHRhcmdl
dCwgR0x1aW50IGZyYW1lYnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQmluZFJl
bmRlcmJ1ZmZlclR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQmxlbmRDb2xvclR5cGUpIChHTGNsYW1wZiwgR0xjbGFt
cGYsIEdMY2xhbXBmLCBHTGNsYW1wZik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJsZW5k
RXF1YXRpb25TZXBhcmF0ZVR5cGUpKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKTsK
K3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQmxlbmRGdW5jU2VwYXJhdGVUeXBlKShHTGVudW0g
c3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJ1ZmZlckRhdGFUeXBlKSAoR0xlbnVtLCBHTHNp
emVpcHRyLCBjb25zdCBHTHZvaWQgKiwgR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkq
IGdsQnVmZmVyU3ViRGF0YVR5cGUpIChHTGVudW0sIEdMaW50cHRyLCBHTHNpemVpcHRyLCBjb25z
dCBHTHZvaWQgKik7Cit0eXBlZGVmIEdMZW51bSAoQVBJRU5UUlkqIGdsQ2hlY2tGcmFtZWJ1ZmZl
clN0YXR1c1R5cGUpIChHTGVudW0gdGFyZ2V0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGds
Q29tcGlsZVNoYWRlclR5cGUpIChHTHVpbnQpOwordHlwZWRlZiBHTHVpbnQgKEFQSUVOVFJZKiBn
bENyZWF0ZVByb2dyYW1UeXBlKSAoKTsKK3R5cGVkZWYgR0x1aW50IChBUElFTlRSWSogZ2xDcmVh
dGVTaGFkZXJUeXBlKSAoR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsRGVsZXRl
QnVmZmVyc1R5cGUpIChHTHNpemVpLCBjb25zdCBHTHVpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZKiBnbERlbGV0ZUZyYW1lYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIGNvbnN0IEdMdWlu
dCAqZnJhbWVidWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsRGVsZXRlUHJvZ3Jh
bVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xEZWxldGVSZW5kZXJi
dWZmZXJzVHlwZSkgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICpyZW5kZXJidWZmZXJzKTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsRGVsZXRlU2hhZGVyVHlwZSkgKEdMdWludCk7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERldGFjaFNoYWRlclR5cGUpIChHTHVpbnQsIEdMdWludCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGUp
IChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlclR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xl
bnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZKiBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEVHlwZSkgKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xp
bnQgbGV2ZWwpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZW5CdWZmZXJzVHlwZSkgKEdM
c2l6ZWksIEdMdWludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2VuZXJhdGVNaXBt
YXBUeXBlKSAoR0xlbnVtIHRhcmdldCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdlbkZy
YW1lYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIEdMdWludCAqZnJhbWVidWZmZXJzKTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2VuUmVuZGVyYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIEdM
dWludCAqcmVuZGVyYnVmZmVycyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldEFjdGl2
ZUF0dHJpYlR5cGUpIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKiBsZW5ndGgsIEdMaW50ICogc2l6ZSwgR0xlbnVtICogdHlwZSwgR0xjaGFy
ICogbmFtZSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldEFjdGl2ZVVuaWZvcm1UeXBl
KSAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVp
ICogbGVuZ3RoLCBHTGludCAqIHNpemUsIEdMZW51bSAqIHR5cGUsIEdMY2hhciAqIG5hbWUpOwor
dHlwZWRlZiBHTGludCAoQVBJRU5UUlkqIGdsR2V0QXR0cmliTG9jYXRpb25UeXBlKSAoR0x1aW50
LCBjb25zdCBjaGFyICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRCdWZmZXJQYXJh
bWV0ZXJpdlR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZKiBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2VHlwZSkgKEdMZW51
bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMp
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRQcm9ncmFtSW5mb0xvZ1R5cGUpIChHTHVp
bnQsIEdMc2l6ZWksIEdMc2l6ZWkgKiwgY2hhciAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkq
IGdsR2V0UHJvZ3JhbWl2VHlwZSkgKEdMdWludCwgR0xlbnVtLCBHTGludCAqKTsKK3R5cGVkZWYg
dm9pZCAoQVBJRU5UUlkqIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZUeXBlKSAoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsR2V0U2hhZGVySW5mb0xvZ1R5cGUpIChHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkg
KiwgY2hhciAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0U2hhZGVyaXZUeXBlKSAo
R0x1aW50LCBHTGVudW0sIEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRT
aGFkZXJTb3VyY2VUeXBlKSAoR0x1aW50LCBHTHNpemVpLCBHTHNpemVpICosIGNoYXIgKik7Cit0
eXBlZGVmIEdMaW50IChBUElFTlRSWSogZ2xHZXRVbmlmb3JtTG9jYXRpb25UeXBlKSAoR0x1aW50
LCBjb25zdCBjaGFyKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldFVuaWZvcm1mdlR5
cGUpIChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgKiBwYXJhbXMpOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRVbmlmb3JtaXZUeXBlKSAoR0x1aW50IHByb2dy
YW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCAqIHBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZKiBnbEdldFZlcnRleEF0dHJpYmZ2VHlwZSkgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1l
LCBHTGZsb2F0ICogcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0VmVydGV4
QXR0cmliaXZUeXBlKSAoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50ICogcGFyYW1z
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnZUeXBl
KSAoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMdm9pZCAqKiBwb2ludGVyKTsKK3R5cGVk
ZWYgR0xib29sZWFuIChBUElFTlRSWSogZ2xJc0J1ZmZlclR5cGUpIChHTHVpbnQgYnVmZmVyKTsK
K3R5cGVkZWYgR0xib29sZWFuIChBUElFTlRSWSogZ2xJc0ZyYW1lYnVmZmVyVHlwZSkgKEdMdWlu
dCBmcmFtZWJ1ZmZlcik7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkqIGdsSXNQcm9ncmFt
VHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkqIGdsSXNSZW5kZXJi
dWZmZXJUeXBlKSAoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJ
RU5UUlkqIGdsSXNTaGFkZXJUeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkq
IGdsTGlua1Byb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGds
UmVuZGVyYnVmZmVyU3RvcmFnZVR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsU2hhZGVyU291cmNlVHlwZSkgKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hhciAq
KiwgY29uc3QgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFN0ZW5jaWxGdW5j
U2VwYXJhdGVUeXBlKSAoR0xlbnVtIGZhY2UsIEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWlu
dCBtYXNrKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZVR5
cGUpIChHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xTdGVuY2lsT3BTZXBhcmF0ZVR5cGUpIChHTGVudW0gZmFjZSwgR0xlbnVtIHNmYWlsLCBHTGVu
dW0gZHBmYWlsLCBHTGVudW0gZHBwYXNzKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5p
Zm9ybTFmVHlwZSkgKEdMaW50LCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGds
VW5pZm9ybTFmdlR5cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTFpVHlwZSkgKEdMaW50LCBHTGludCk7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0xaXZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNv
bnN0IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMmZUeXBlKSAo
R0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlm
b3JtMmZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0ICopOwordHlwZWRlZiB2
b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMmlUeXBlKSAoR0xpbnQsIEdMaW50LCBHTGludCk7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0yaXZUeXBlKSAoR0xpbnQsIEdMc2l6ZWks
IGNvbnN0IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtM2ZUeXBl
KSAoR0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSogZ2xVbmlmb3JtM2Z2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0ICop
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtM2lUeXBlKSAoR0xpbnQsIEdMaW50
LCBHTGludCwgR0xpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtM2l2VHlw
ZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkqIGdsVW5pZm9ybTRmVHlwZSkgKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBH
TGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTRmdlR5cGUpIChHTGlu
dCwgR0xzaXplaSwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGds
VW5pZm9ybTRpVHlwZSkgKEdMaW50LCBHTGludCwgR0xpbnQsIEdMaW50LCBHTGludCk7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm00aXZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNv
bnN0IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtTWF0cml4MmZ2
VHlwZSkgKEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm1NYXRyaXgzZnZUeXBlKSAoR0xpbnQsIEdMc2l6
ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkq
IGdsVW5pZm9ybU1hdHJpeDRmdlR5cGUpIChHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25z
dCBHTGZsb2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVc2VQcm9ncmFtVHlwZSkg
KEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZhbGlkYXRlUHJvZ3JhbVR5cGUp
IChHTHVpbnQgcHJvZ3JhbSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJp
YjFmVHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
KiBnbFZlcnRleEF0dHJpYjFmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjJmVHlwZSkgKEdMdWludCwgY29uc3Qg
R0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRl
eEF0dHJpYjJmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjNmVHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCwg
Y29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bFZlcnRleEF0dHJpYjNmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjRmVHlwZSkgKEdMdWludCwgY29uc3QgR0xm
bG9hdCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjRmdlR5cGUpIChHTHVpbnQsIGNvbnN0
IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYlBvaW50
ZXJUeXBlKSAoR0x1aW50LCBHTGludCwgR0xlbnVtLCBHTGJvb2xlYW4sIEdMc2l6ZWksIGNvbnN0
IEdMdm9pZCAqKTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCB7CitwdWJsaWM6
CisKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJzKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOworCisgICAg
Ym9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gbV92YWxpZDsgfQorCitwdWJsaWM6CisKKyAgICBnbEFj
dGl2ZVRleHR1cmVUeXBlIGFjdGl2ZVRleHR1cmU7CisgICAgZ2xBdHRhY2hTaGFkZXJUeXBlIGF0
dGFjaFNoYWRlcjsKKyAgICBnbEJpbmRBdHRyaWJMb2NhdGlvblR5cGUgYmluZEF0dHJpYkxvY2F0
aW9uOworICAgIGdsQmluZEJ1ZmZlclR5cGUgYmluZEJ1ZmZlcjsKKyAgICBnbEJpbmRGcmFtZWJ1
ZmZlclR5cGUgYmluZEZyYW1lYnVmZmVyOworICAgIGdsQmluZFJlbmRlcmJ1ZmZlclR5cGUgYmlu
ZFJlbmRlcmJ1ZmZlcjsKKyAgICBnbEJsZW5kQ29sb3JUeXBlIGJsZW5kQ29sb3I7CisgICAgZ2xC
bGVuZEVxdWF0aW9uU2VwYXJhdGVUeXBlIGJsZW5kRXF1YXRpb25TZXBhcmF0ZTsKKyAgICBnbEJs
ZW5kRnVuY1NlcGFyYXRlVHlwZSBibGVuZEZ1bmNTZXBhcmF0ZTsKKyAgICBnbEJ1ZmZlckRhdGFU
eXBlIGJ1ZmZlckRhdGE7CisgICAgZ2xCdWZmZXJTdWJEYXRhVHlwZSBidWZmZXJTdWJEYXRhOwor
ICAgIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c1R5cGUgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1czsK
KyAgICBnbENvbXBpbGVTaGFkZXJUeXBlIGNvbXBpbGVTaGFkZXI7CisgICAgZ2xDcmVhdGVQcm9n
cmFtVHlwZSBjcmVhdGVQcm9ncmFtOworICAgIGdsQ3JlYXRlU2hhZGVyVHlwZSBjcmVhdGVTaGFk
ZXI7CisgICAgZ2xEZWxldGVCdWZmZXJzVHlwZSBkZWxldGVCdWZmZXJzOworICAgIGdsRGVsZXRl
RnJhbWVidWZmZXJzVHlwZSBkZWxldGVGcmFtZWJ1ZmZlcnM7CisgICAgZ2xEZWxldGVQcm9ncmFt
VHlwZSBkZWxldGVQcm9ncmFtOworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc1R5cGUgZGVsZXRl
UmVuZGVyYnVmZmVyczsKKyAgICBnbERlbGV0ZVNoYWRlclR5cGUgZGVsZXRlU2hhZGVyOworICAg
IGdsRGV0YWNoU2hhZGVyVHlwZSBkZXRhY2hTaGFkZXI7CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXlUeXBlIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBnbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5VHlwZSBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBnbEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyVHlwZSBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcjsKKyAgICBnbEZyYW1l
YnVmZmVyVGV4dHVyZTJEVHlwZSBmcmFtZWJ1ZmZlclRleHR1cmUyRDsKKyAgICBnbEdlbkJ1ZmZl
cnNUeXBlIGdlbkJ1ZmZlcnM7CisgICAgZ2xHZW5lcmF0ZU1pcG1hcFR5cGUgZ2VuZXJhdGVNaXBt
YXA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNUeXBlIGdlbkZyYW1lYnVmZmVyczsKKyAgICBnbEdl
blJlbmRlcmJ1ZmZlcnNUeXBlIGdlblJlbmRlcmJ1ZmZlcnM7CisgICAgZ2xHZXRBY3RpdmVBdHRy
aWJUeXBlIGdldEFjdGl2ZUF0dHJpYjsKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1UeXBlIGdldEFj
dGl2ZVVuaWZvcm07CisgICAgZ2xHZXRBdHRyaWJMb2NhdGlvblR5cGUgZ2V0QXR0cmliTG9jYXRp
b247CisgICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdlR5cGUgZ2V0QnVmZmVyUGFyYW1ldGVyaXY7
CisgICAgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdlR5cGUgZ2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXY7CisgICAgZ2xHZXRQcm9ncmFtSW5mb0xvZ1R5cGUg
Z2V0UHJvZ3JhbUluZm9Mb2c7CisgICAgZ2xHZXRQcm9ncmFtaXZUeXBlIGdldFByb2dyYW1pdjsK
KyAgICBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2VHlwZSBnZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdjsKKyAgICBnbEdldFNoYWRlckluZm9Mb2dUeXBlIGdldFNoYWRlckluZm9Mb2c7Cisg
ICAgZ2xHZXRTaGFkZXJpdlR5cGUgZ2V0U2hhZGVyaXY7CisgICAgZ2xHZXRTaGFkZXJTb3VyY2VU
eXBlIGdldFNoYWRlclNvdXJjZTsKKyAgICBnbEdldFVuaWZvcm1mdlR5cGUgZ2V0VW5pZm9ybWZ2
OworICAgIGdsR2V0VW5pZm9ybWl2VHlwZSBnZXRVbmlmb3JtaXY7CisgICAgZ2xHZXRVbmlmb3Jt
TG9jYXRpb25UeXBlIGdldFVuaWZvcm1Mb2NhdGlvbjsKKyAgICBnbEdldFZlcnRleEF0dHJpYmZ2
VHlwZSBnZXRWZXJ0ZXhBdHRyaWJmdjsKKyAgICBnbEdldFZlcnRleEF0dHJpYml2VHlwZSBnZXRW
ZXJ0ZXhBdHRyaWJpdjsKKyAgICBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2VHlwZSBnZXRWZXJ0
ZXhBdHRyaWJQb2ludGVydjsKKyAgICBnbElzQnVmZmVyVHlwZSBpc0J1ZmZlcjsKKyAgICBnbElz
RnJhbWVidWZmZXJUeXBlIGlzRnJhbWVidWZmZXI7CisgICAgZ2xJc1Byb2dyYW1UeXBlIGlzUHJv
Z3JhbTsKKyAgICBnbElzUmVuZGVyYnVmZmVyVHlwZSBpc1JlbmRlcmJ1ZmZlcjsKKyAgICBnbElz
U2hhZGVyVHlwZSBpc1NoYWRlcjsKKyAgICBnbExpbmtQcm9ncmFtVHlwZSBsaW5rUHJvZ3JhbTsK
KyAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VUeXBlIHJlbmRlcmJ1ZmZlclN0b3JhZ2U7CisgICAg
Z2xTaGFkZXJTb3VyY2VUeXBlIHNoYWRlclNvdXJjZTsKKyAgICBnbFN0ZW5jaWxGdW5jU2VwYXJh
dGVUeXBlIHN0ZW5jaWxGdW5jU2VwYXJhdGU7CisgICAgZ2xTdGVuY2lsTWFza1NlcGFyYXRlVHlw
ZSBzdGVuY2lsTWFza1NlcGFyYXRlOworICAgIGdsU3RlbmNpbE9wU2VwYXJhdGVUeXBlIHN0ZW5j
aWxPcFNlcGFyYXRlOworICAgIGdsVW5pZm9ybTFmVHlwZSB1bmlmb3JtMWY7CisgICAgZ2xVbmlm
b3JtMWZ2VHlwZSB1bmlmb3JtMWZ2OworICAgIGdsVW5pZm9ybTFpVHlwZSB1bmlmb3JtMWk7Cisg
ICAgZ2xVbmlmb3JtMWl2VHlwZSB1bmlmb3JtMWl2OworICAgIGdsVW5pZm9ybTJmVHlwZSB1bmlm
b3JtMmY7CisgICAgZ2xVbmlmb3JtMmZ2VHlwZSB1bmlmb3JtMmZ2OworICAgIGdsVW5pZm9ybTJp
VHlwZSB1bmlmb3JtMmk7CisgICAgZ2xVbmlmb3JtMml2VHlwZSB1bmlmb3JtMml2OworICAgIGds
VW5pZm9ybTNmVHlwZSB1bmlmb3JtM2Y7CisgICAgZ2xVbmlmb3JtM2Z2VHlwZSB1bmlmb3JtM2Z2
OworICAgIGdsVW5pZm9ybTNpVHlwZSB1bmlmb3JtM2k7CisgICAgZ2xVbmlmb3JtM2l2VHlwZSB1
bmlmb3JtM2l2OworICAgIGdsVW5pZm9ybTRmVHlwZSB1bmlmb3JtNGY7CisgICAgZ2xVbmlmb3Jt
NGZ2VHlwZSB1bmlmb3JtNGZ2OworICAgIGdsVW5pZm9ybTRpVHlwZSB1bmlmb3JtNGk7CisgICAg
Z2xVbmlmb3JtNGl2VHlwZSB1bmlmb3JtNGl2OworICAgIGdsVW5pZm9ybU1hdHJpeDJmdlR5cGUg
dW5pZm9ybU1hdHJpeDJmdjsKKyAgICBnbFVuaWZvcm1NYXRyaXgzZnZUeXBlIHVuaWZvcm1NYXRy
aXgzZnY7CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2VHlwZSB1bmlmb3JtTWF0cml4NGZ2OworICAg
IGdsVXNlUHJvZ3JhbVR5cGUgdXNlUHJvZ3JhbTsKKyAgICBnbFZhbGlkYXRlUHJvZ3JhbVR5cGUg
dmFsaWRhdGVQcm9ncmFtOworICAgIGdsVmVydGV4QXR0cmliMWZUeXBlIHZlcnRleEF0dHJpYjFm
OworICAgIGdsVmVydGV4QXR0cmliMWZ2VHlwZSB2ZXJ0ZXhBdHRyaWIxZnY7CisgICAgZ2xWZXJ0
ZXhBdHRyaWIyZlR5cGUgdmVydGV4QXR0cmliMmY7CisgICAgZ2xWZXJ0ZXhBdHRyaWIyZnZUeXBl
IHZlcnRleEF0dHJpYjJmdjsKKyAgICBnbFZlcnRleEF0dHJpYjNmVHlwZSB2ZXJ0ZXhBdHRyaWIz
ZjsKKyAgICBnbFZlcnRleEF0dHJpYjNmdlR5cGUgdmVydGV4QXR0cmliM2Z2OworICAgIGdsVmVy
dGV4QXR0cmliNGZUeXBlIHZlcnRleEF0dHJpYjRmOworICAgIGdsVmVydGV4QXR0cmliNGZ2VHlw
ZSB2ZXJ0ZXhBdHRyaWI0ZnY7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyVHlwZSB2ZXJ0ZXhB
dHRyaWJQb2ludGVyOworCitwdWJsaWM6CisKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBtX2F0dHJzOworICAgIFFHTFdpZGdldCogbV9nbFdpZGdldDsKKyAgICBHTHVpbnQgbV90
ZXh0dXJlOworICAgIEdMdWludCBtX21haW5GYm87CisgICAgR0x1aW50IG1fY3VycmVudEZibzsK
KyAgICBHTHVpbnQgbV9kZXB0aEJ1ZmZlcjsKKyAgICBRSW1hZ2UgbV9waXhlbHM7CisgICAgTGlz
dEhhc2hTZXQ8dW5zaWduZWQgbG9uZz4gbV9zeW50aGV0aWNFcnJvcnM7CisKK3ByaXZhdGU6CisK
KyAgICB2b2lkKiBnZXRQcm9jQWRkcmVzcyhjb25zdCBRR0xDb250ZXh0KiBjdHgsIGNvbnN0IFFT
dHJpbmcmIHByb2MpOworCitwcml2YXRlOgorCisgICAgYm9vbCBtX3ZhbGlkOworfTsKKworR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKKyAgICA6IG1fYXR0cnMoYXR0cnMpCisgICAg
LCBtX2dsV2lkZ2V0KDApCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1fbWFpbkZibygwKQor
ICAgICwgbV9jdXJyZW50RmJvKDApCisgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX3Zh
bGlkKHRydWUpCit7CisgICAgbV9hdHRycy5hbHBoYSA9IHRydWU7CisgICAgbV9hdHRycy5kZXB0
aCA9IHRydWU7CisgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgbV9hdHRycy5hbnRp
YWxpYXMgPSBmYWxzZTsKKyAgICBtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7CisK
KyAgICBRR0xGb3JtYXQgZm9ybWF0OworCisgICAgZm9ybWF0LnNldERlcHRoKHRydWUpOworICAg
IGZvcm1hdC5zZXRTYW1wbGVCdWZmZXJzKHRydWUpOworICAgIGZvcm1hdC5zZXRTdGVuY2lsKGZh
bHNlKTsKKworICAgIG1fZ2xXaWRnZXQgPSBuZXcgUUdMV2lkZ2V0KGZvcm1hdCk7CisgICAgaWYg
KCFtX2dsV2lkZ2V0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgcVdhcm5pbmcoIkdyYXBoaWNzQ29u
dGV4dDNEOiBRR0xXaWRnZXQgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGNvbnRleHQiKTsKKyAgICAg
ICAgbV92YWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIGNvbnN0IFFHTENvbnRleHQqIGN0eCA9IG1fZ2xX
aWRnZXQtPmNvbnRleHQoKTsKKworI2lmICFkZWZpbmVkIChRVF9PUEVOR0xfRVNfMikgCisgICAg
YWN0aXZlVGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xBY3RpdmVUZXh0dXJlVHlwZT4oZ2V0
UHJvY0FkZHJlc3MoY3R4LCAiZ2xBY3RpdmVUZXh0dXJlIikpOworICAgIGF0dGFjaFNoYWRlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xBdHRhY2hTaGFkZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgs
ICJnbEF0dGFjaFNoYWRlciIpKTsKKyAgICBiaW5kQXR0cmliTG9jYXRpb24gPSByZWludGVycHJl
dF9jYXN0PGdsQmluZEF0dHJpYkxvY2F0aW9uVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xC
aW5kQXR0cmliTG9jYXRpb24iKSk7CisgICAgYmluZEJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Z2xCaW5kQnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCaW5kQnVmZmVyIikpOwor
ICAgIGJpbmRGcmFtZWJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCaW5kRnJhbWVidWZmZXJU
eXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJpbmRGcmFtZWJ1ZmZlciIpKTsKKyAgICBiaW5k
UmVuZGVyYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbEJpbmRSZW5kZXJidWZmZXJUeXBlPihn
ZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJpbmRSZW5kZXJidWZmZXIiKSk7CisgICAgYmxlbmRDb2xv
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCbGVuZENvbG9yVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xCbGVuZENvbG9yIikpOworICAgIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgs
ICJnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZSIpKTsKKyAgICBibGVuZEZ1bmNTZXBhcmF0ZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xCbGVuZEZ1bmNTZXBhcmF0ZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0
eCwgImdsQmxlbmRGdW5jU2VwYXJhdGUiKSk7CisgICAgYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xCdWZmZXJEYXRhVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCdWZmZXJEYXRh
IikpOworICAgIGJ1ZmZlclN1YkRhdGEgPSByZWludGVycHJldF9jYXN0PGdsQnVmZmVyU3ViRGF0
YVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQnVmZmVyU3ViRGF0YSIpKTsKKyAgICBjaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzID0gcmVpbnRlcnByZXRfY2FzdDxnbENoZWNrRnJhbWVidWZmZXJT
dGF0dXNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMi
KSk7CisgICAgY29tcGlsZVNoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xDb21waWxlU2hhZGVy
VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xDb21waWxlU2hhZGVyIikpOworICAgIGNyZWF0
ZVByb2dyYW0gPSByZWludGVycHJldF9jYXN0PGdsQ3JlYXRlUHJvZ3JhbVR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsQ3JlYXRlUHJvZ3JhbSIpKTsKKyAgICBjcmVhdGVTaGFkZXIgPSByZWlu
dGVycHJldF9jYXN0PGdsQ3JlYXRlU2hhZGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xD
cmVhdGVTaGFkZXIiKSk7CisgICAgZGVsZXRlQnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xE
ZWxldGVCdWZmZXJzVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xEZWxldGVCdWZmZXJzIikp
OworICAgIGRlbGV0ZUZyYW1lYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxldGVGcmFt
ZWJ1ZmZlcnNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERlbGV0ZUZyYW1lYnVmZmVycyIp
KTsKKyAgICBkZWxldGVQcm9ncmFtID0gcmVpbnRlcnByZXRfY2FzdDxnbERlbGV0ZVByb2dyYW1U
eXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERlbGV0ZVByb2dyYW0iKSk7CisgICAgZGVsZXRl
UmVuZGVyYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxldGVSZW5kZXJidWZmZXJzVHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xEZWxldGVSZW5kZXJidWZmZXJzIikpOworICAgIGRl
bGV0ZVNoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxldGVTaGFkZXJUeXBlPihnZXRQcm9j
QWRkcmVzcyhjdHgsICJnbERlbGV0ZVNoYWRlciIpKTsKKyAgICBkZXRhY2hTaGFkZXIgPSByZWlu
dGVycHJldF9jYXN0PGdsRGV0YWNoU2hhZGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xE
ZXRhY2hTaGFkZXIiKSk7CisgICAgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ID0gcmVpbnRlcnBy
ZXRfY2FzdDxnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGU+KGdldFByb2NBZGRyZXNzKGN0
eCwgImdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5IikpOworICAgIGVuYWJsZVZlcnRleEF0dHJp
YkFycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZT4o
Z2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIpKTsKKyAgICBm
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xGcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIiKSk7CisgICAgZnJhbWVidWZmZXJUZXh0dXJlMkQgPSByZWludGVycHJldF9jYXN0PGds
RnJhbWVidWZmZXJUZXh0dXJlMkRUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEIikpOworICAgIGdlbkJ1ZmZlcnMgPSByZWludGVycHJldF9jYXN0PGdsR2Vu
QnVmZmVyc1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2VuQnVmZmVycyIpKTsKKyAgICBn
ZW5lcmF0ZU1pcG1hcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZW5lcmF0ZU1pcG1hcFR5cGU+KGdl
dFByb2NBZGRyZXNzKGN0eCwgImdsR2VuZXJhdGVNaXBtYXAiKSk7CisgICAgZ2VuRnJhbWVidWZm
ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxnbEdlbkZyYW1lYnVmZmVyc1R5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsR2VuRnJhbWVidWZmZXJzIikpOworICAgIGdlblJlbmRlcmJ1ZmZlcnMgPSBy
ZWludGVycHJldF9jYXN0PGdsR2VuUmVuZGVyYnVmZmVyc1R5cGU+KGdldFByb2NBZGRyZXNzKGN0
eCwgImdsR2VuUmVuZGVyYnVmZmVycyIpKTsKKyAgICBnZXRBY3RpdmVBdHRyaWIgPSByZWludGVy
cHJldF9jYXN0PGdsR2V0QWN0aXZlQXR0cmliVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xH
ZXRBY3RpdmVBdHRyaWIiKSk7CisgICAgZ2V0QWN0aXZlVW5pZm9ybSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Z2xHZXRBY3RpdmVVbmlmb3JtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRBY3Rp
dmVVbmlmb3JtIikpOworICAgIGdldEF0dHJpYkxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxn
bEdldEF0dHJpYkxvY2F0aW9uVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRBdHRyaWJM
b2NhdGlvbiIpKTsKKyAgICBnZXRCdWZmZXJQYXJhbWV0ZXJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0QnVm
ZmVyUGFyYW1ldGVyaXYiKSk7CisgICAgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYgPSByZWludGVycHJldF9jYXN0PGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2IikpOworICAgIGdldFByb2dyYW1JbmZvTG9nID0gcmVpbnRlcnByZXRfY2FzdDxn
bEdldFByb2dyYW1JbmZvTG9nVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRQcm9ncmFt
SW5mb0xvZyIpKTsKKyAgICBnZXRQcm9ncmFtaXYgPSByZWludGVycHJldF9jYXN0PGdsR2V0UHJv
Z3JhbWl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRQcm9ncmFtaXYiKSk7CisgICAg
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYgPSByZWludGVycHJldF9jYXN0PGdsR2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcml2IikpOworICAgIGdldFNoYWRlckluZm9Mb2cgPSByZWludGVycHJldF9j
YXN0PGdsR2V0U2hhZGVySW5mb0xvZ1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0U2hh
ZGVySW5mb0xvZyIpKTsKKyAgICBnZXRTaGFkZXJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRT
aGFkZXJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0U2hhZGVyaXYiKSk7CisgICAg
Z2V0U2hhZGVyU291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFNoYWRlclNvdXJjZVR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0U2hhZGVyU291cmNlIikpOworICAgIGdldFVuaWZv
cm1mdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRVbmlmb3JtZnZUeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbEdldFVuaWZvcm1mdiIpKTsKKyAgICBnZXRVbmlmb3JtaXYgPSByZWludGVycHJl
dF9jYXN0PGdsR2V0VW5pZm9ybWl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRVbmlm
b3JtaXYiKSk7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxnbEdl
dFVuaWZvcm1Mb2NhdGlvblR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0VW5pZm9ybUxv
Y2F0aW9uIikpOworICAgIGdldFZlcnRleEF0dHJpYmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbEdl
dFZlcnRleEF0dHJpYmZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRWZXJ0ZXhBdHRy
aWJmdiIpKTsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRW
ZXJ0ZXhBdHRyaWJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0VmVydGV4QXR0cmli
aXYiKSk7CisgICAgZ2V0VmVydGV4QXR0cmliUG9pbnRlcnYgPSByZWludGVycHJldF9jYXN0PGds
R2V0VmVydGV4QXR0cmliUG9pbnRlcnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldFZl
cnRleEF0dHJpYlBvaW50ZXJ2IikpOworICAgIGlzQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxn
bElzQnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xJc0J1ZmZlciIpKTsKKyAgICBp
c0ZyYW1lYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbElzRnJhbWVidWZmZXJUeXBlPihnZXRQ
cm9jQWRkcmVzcyhjdHgsICJnbElzRnJhbWVidWZmZXIiKSk7CisgICAgaXNQcm9ncmFtID0gcmVp
bnRlcnByZXRfY2FzdDxnbElzUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsSXNQ
cm9ncmFtIikpOworICAgIGlzUmVuZGVyYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbElzUmVu
ZGVyYnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xJc1JlbmRlcmJ1ZmZlciIpKTsK
KyAgICBpc1NoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xJc1NoYWRlclR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsSXNTaGFkZXIiKSk7CisgICAgbGlua1Byb2dyYW0gPSByZWludGVycHJl
dF9jYXN0PGdsTGlua1Byb2dyYW1UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbExpbmtQcm9n
cmFtIikpOworICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsUmVuZGVyYnVmZmVy
U3RvcmFnZSIpKTsKKyAgICBzaGFkZXJTb3VyY2UgPSByZWludGVycHJldF9jYXN0PGdsU2hhZGVy
U291cmNlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xTaGFkZXJTb3VyY2UiKSk7CisgICAg
c3RlbmNpbEZ1bmNTZXBhcmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xTdGVuY2lsRnVuY1NlcGFy
YXRlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xTdGVuY2lsRnVuY1NlcGFyYXRlIikpOwor
ICAgIHN0ZW5jaWxNYXNrU2VwYXJhdGUgPSByZWludGVycHJldF9jYXN0PGdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsU3RlbmNpbE1hc2tTZXBhcmF0ZSIp
KTsKKyAgICBzdGVuY2lsT3BTZXBhcmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xTdGVuY2lsT3BT
ZXBhcmF0ZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsU3RlbmNpbE9wU2VwYXJhdGUiKSk7
CisgICAgdW5pZm9ybTFmID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0xZlR5cGU+KGdldFBy
b2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTFmIikpOworICAgIHVuaWZvcm0xZnYgPSByZWludGVy
cHJldF9jYXN0PGdsVW5pZm9ybTFmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9y
bTFmdiIpKTsKKyAgICB1bmlmb3JtMWkgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTFpVHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMWkiKSk7CisgICAgdW5pZm9ybTFpdiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtMWl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAi
Z2xVbmlmb3JtMWl2IikpOworICAgIHVuaWZvcm0yZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlm
b3JtMmZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0yZiIpKTsKKyAgICB1bmlm
b3JtMmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0yZnZUeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbFVuaWZvcm0yZnYiKSk7CisgICAgdW5pZm9ybTJpID0gcmVpbnRlcnByZXRfY2Fz
dDxnbFVuaWZvcm0yaVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTJpIikpOwor
ICAgIHVuaWZvcm0yaXYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTJpdlR5cGU+KGdldFBy
b2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTJpdiIpKTsKKyAgICB1bmlmb3JtM2YgPSByZWludGVy
cHJldF9jYXN0PGdsVW5pZm9ybTNmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3Jt
M2YiKSk7CisgICAgdW5pZm9ybTNmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtM2Z2VHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtM2Z2IikpOworICAgIHVuaWZvcm0zaSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtM2lUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJn
bFVuaWZvcm0zaSIpKTsKKyAgICB1bmlmb3JtM2l2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZv
cm0zaXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0zaXYiKSk7CisgICAgdW5p
Zm9ybTRmID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm00ZlR5cGU+KGdldFByb2NBZGRyZXNz
KGN0eCwgImdsVW5pZm9ybTRmIikpOworICAgIHVuaWZvcm00ZnYgPSByZWludGVycHJldF9jYXN0
PGdsVW5pZm9ybTRmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTRmdiIpKTsK
KyAgICB1bmlmb3JtNGkgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTRpVHlwZT4oZ2V0UHJv
Y0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtNGkiKSk7CisgICAgdW5pZm9ybTRpdiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Z2xVbmlmb3JtNGl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3Jt
NGl2IikpOworICAgIHVuaWZvcm1NYXRyaXgyZnYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9y
bU1hdHJpeDJmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJpeDJmdiIp
KTsKKyAgICB1bmlmb3JtTWF0cml4M2Z2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm1NYXRy
aXgzZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm1NYXRyaXgzZnYiKSk7Cisg
ICAgdW5pZm9ybU1hdHJpeDRmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtTWF0cml4NGZ2
VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtTWF0cml4NGZ2IikpOworICAgIHVz
ZVByb2dyYW0gPSByZWludGVycHJldF9jYXN0PGdsVXNlUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsVXNlUHJvZ3JhbSIpKTsKKyAgICB2YWxpZGF0ZVByb2dyYW0gPSByZWludGVy
cHJldF9jYXN0PGdsVmFsaWRhdGVQcm9ncmFtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xW
YWxpZGF0ZVByb2dyYW0iKSk7CisgICAgdmVydGV4QXR0cmliMWYgPSByZWludGVycHJldF9jYXN0
PGdsVmVydGV4QXR0cmliMWZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJp
YjFmIikpOworICAgIHZlcnRleEF0dHJpYjFmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhB
dHRyaWIxZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjFmdiIpKTsK
KyAgICB2ZXJ0ZXhBdHRyaWIyZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRyaWIyZlR5
cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVmVydGV4QXR0cmliMmYiKSk7CisgICAgdmVydGV4
QXR0cmliMmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjJmdlR5cGU+KGdldFBy
b2NBZGRyZXNzKGN0eCwgImdsVmVydGV4QXR0cmliMmZ2IikpOworICAgIHZlcnRleEF0dHJpYjNm
ID0gcmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjNmVHlwZT4oZ2V0UHJvY0FkZHJlc3Mo
Y3R4LCAiZ2xWZXJ0ZXhBdHRyaWIzZiIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWIzZnYgPSByZWludGVy
cHJldF9jYXN0PGdsVmVydGV4QXR0cmliM2Z2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xW
ZXJ0ZXhBdHRyaWIzZnYiKSk7CisgICAgdmVydGV4QXR0cmliNGYgPSByZWludGVycHJldF9jYXN0
PGdsVmVydGV4QXR0cmliNGZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJp
YjRmIikpOworICAgIHZlcnRleEF0dHJpYjRmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhB
dHRyaWI0ZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjRmdiIpKTsK
KyAgICB2ZXJ0ZXhBdHRyaWJQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJp
YlBvaW50ZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYlBvaW50ZXIi
KSk7CisjZWxzZQorICAgIGFjdGl2ZVRleHR1cmUgPSBnbEFjdGl2ZVRleHR1cmU7CisgICAgYXR0
YWNoU2hhZGVyID0gZ2xBdHRhY2hTaGFkZXI7CisgICAgYmluZEF0dHJpYkxvY2F0aW9uID0gZ2xC
aW5kQXR0cmliTG9jYXRpb247CisgICAgYmluZEJ1ZmZlciA9IGdsQmluZEJ1ZmZlcjsKKyAgICBi
aW5kRnJhbWVidWZmZXIgPSBnbEJpbmRGcmFtZWJ1ZmZlcjsKKyAgICBiaW5kUmVuZGVyYnVmZmVy
ID0gZ2xCaW5kUmVuZGVyYnVmZmVyOworICAgIGJsZW5kQ29sb3IgPSBnbEJsZW5kQ29sb3I7Cisg
ICAgYmxlbmRFcXVhdGlvblNlcGFyYXRlID0gZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGU7CisgICAg
YmxlbmRGdW5jU2VwYXJhdGUgPSBnbEJsZW5kRnVuY1NlcGFyYXRlOworICAgIGJ1ZmZlckRhdGEg
PSBnbEJ1ZmZlckRhdGE7CisgICAgYnVmZmVyU3ViRGF0YSA9IGdsQnVmZmVyU3ViRGF0YTsKKyAg
ICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzOworICAg
IGNvbXBpbGVTaGFkZXIgPSBnbENvbXBpbGVTaGFkZXI7CisgICAgY3JlYXRlUHJvZ3JhbSA9IGds
Q3JlYXRlUHJvZ3JhbTsKKyAgICBjcmVhdGVTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcjsKKyAgICBk
ZWxldGVCdWZmZXJzID0gZ2xEZWxldGVCdWZmZXJzOworICAgIGRlbGV0ZUZyYW1lYnVmZmVycyA9
IGdsRGVsZXRlRnJhbWVidWZmZXJzOworICAgIGRlbGV0ZVByb2dyYW0gPSBnbERlbGV0ZVByb2dy
YW07CisgICAgZGVsZXRlUmVuZGVyYnVmZmVycyA9IGdsRGVsZXRlUmVuZGVyYnVmZmVyczsKKyAg
ICBkZWxldGVTaGFkZXIgPSBnbERlbGV0ZVNoYWRlcjsKKyAgICBkZXRhY2hTaGFkZXIgPSBnbERl
dGFjaFNoYWRlcjsKKyAgICBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkgPSBnbERpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheTsKKyAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSA9IGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXk7CisgICAgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIgPSBnbEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyOworICAgIGZyYW1lYnVmZmVyVGV4dHVyZTJEID0gZ2xGcmFtZWJ1ZmZl
clRleHR1cmUyRDsKKyAgICBnZW5CdWZmZXJzID0gZ2xHZW5CdWZmZXJzOworICAgIGdlbmVyYXRl
TWlwbWFwID0gZ2xHZW5lcmF0ZU1pcG1hcDsKKyAgICBnZW5GcmFtZWJ1ZmZlcnMgPSBnbEdlbkZy
YW1lYnVmZmVyczsKKyAgICBnZW5SZW5kZXJidWZmZXJzID0gZ2xHZW5SZW5kZXJidWZmZXJzOwor
ICAgIGdldEFjdGl2ZUF0dHJpYiA9IGdsR2V0QWN0aXZlQXR0cmliOworICAgIGdldEFjdGl2ZVVu
aWZvcm0gPSBnbEdldEFjdGl2ZVVuaWZvcm07CisgICAgZ2V0QXR0cmliTG9jYXRpb24gPSBnbEdl
dEF0dHJpYkxvY2F0aW9uOworICAgIGdldEJ1ZmZlclBhcmFtZXRlcml2ID0gZ2xHZXRCdWZmZXJQ
YXJhbWV0ZXJpdjsKKyAgICBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiA9IGds
R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXY7CisgICAgZ2V0UHJvZ3JhbUluZm9M
b2cgPSBnbEdldFByb2dyYW1JbmZvTG9nOworICAgIGdldFByb2dyYW1pdiA9IGdsR2V0UHJvZ3Jh
bWl2OworICAgIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2ID0gZ2xHZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdjsKKyAgICBnZXRTaGFkZXJJbmZvTG9nID0gZ2xHZXRTaGFkZXJJbmZvTG9nOwor
ICAgIGdldFNoYWRlcml2ID0gZ2xHZXRTaGFkZXJpdjsKKyAgICBnZXRTaGFkZXJTb3VyY2UgPSBn
bEdldFNoYWRlclNvdXJjZTsKKyAgICBnZXRVbmlmb3JtZnYgPSBnbEdldFVuaWZvcm1mdjsKKyAg
ICBnZXRVbmlmb3JtaXYgPSBnbEdldFVuaWZvcm1pdjsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24g
PSBnbEdldFVuaWZvcm1Mb2NhdGlvbjsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJmdiA9IGdsR2V0VmVy
dGV4QXR0cmliZnY7CisgICAgZ2V0VmVydGV4QXR0cmliaXYgPSBnbEdldFZlcnRleEF0dHJpYml2
OworICAgIGdldFZlcnRleEF0dHJpYlBvaW50ZXJ2ID0gZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVy
djsKKyAgICBpc0J1ZmZlciA9IGdsSXNCdWZmZXI7CisgICAgaXNGcmFtZWJ1ZmZlciA9IGdsSXNG
cmFtZWJ1ZmZlcjsKKyAgICBpc1Byb2dyYW0gPSBnbElzUHJvZ3JhbTsKKyAgICBpc1JlbmRlcmJ1
ZmZlciA9IGdsSXNSZW5kZXJidWZmZXI7CisgICAgaXNTaGFkZXIgPSBnbElzU2hhZGVyOworICAg
IGxpbmtQcm9ncmFtID0gZ2xMaW5rUHJvZ3JhbTsKKyAgICByZW5kZXJidWZmZXJTdG9yYWdlID0g
Z2xSZW5kZXJidWZmZXJTdG9yYWdlOworICAgIHNoYWRlclNvdXJjZSA9IGdsU2hhZGVyU291cmNl
OworICAgIHN0ZW5jaWxGdW5jU2VwYXJhdGUgPSBnbFN0ZW5jaWxGdW5jU2VwYXJhdGU7CisgICAg
c3RlbmNpbE1hc2tTZXBhcmF0ZSA9IGdsU3RlbmNpbE1hc2tTZXBhcmF0ZTsKKyAgICBzdGVuY2ls
T3BTZXBhcmF0ZSA9IGdsU3RlbmNpbE9wU2VwYXJhdGU7CisgICAgdW5pZm9ybTFmID0gZ2xVbmlm
b3JtMWY7CisgICAgdW5pZm9ybTFmdiA9IGdsVW5pZm9ybTFmdjsKKyAgICB1bmlmb3JtMWkgPSBn
bFVuaWZvcm0xaTsKKyAgICB1bmlmb3JtMWl2ID0gZ2xVbmlmb3JtMWl2OworICAgIHVuaWZvcm0y
ZiA9IGdsVW5pZm9ybTJmOworICAgIHVuaWZvcm0yZnYgPSBnbFVuaWZvcm0yZnY7CisgICAgdW5p
Zm9ybTJpID0gZ2xVbmlmb3JtMmk7CisgICAgdW5pZm9ybTJpdiA9IGdsVW5pZm9ybTJpdjsKKyAg
ICB1bmlmb3JtM2YgPSBnbFVuaWZvcm0zZjsKKyAgICB1bmlmb3JtM2Z2ID0gZ2xVbmlmb3JtM2Z2
OworICAgIHVuaWZvcm0zaSA9IGdsVW5pZm9ybTNpOworICAgIHVuaWZvcm0zaXYgPSBnbFVuaWZv
cm0zaXY7CisgICAgdW5pZm9ybTRmID0gZ2xVbmlmb3JtNGY7CisgICAgdW5pZm9ybTRmdiA9IGds
VW5pZm9ybTRmdjsKKyAgICB1bmlmb3JtNGkgPSBnbFVuaWZvcm00aTsKKyAgICB1bmlmb3JtNGl2
ID0gZ2xVbmlmb3JtNGl2OworICAgIHVuaWZvcm1NYXRyaXgyZnYgPSBnbFVuaWZvcm1NYXRyaXgy
ZnY7CisgICAgdW5pZm9ybU1hdHJpeDNmdiA9IGdsVW5pZm9ybU1hdHJpeDNmdjsKKyAgICB1bmlm
b3JtTWF0cml4NGZ2ID0gZ2xVbmlmb3JtTWF0cml4NGZ2OworICAgIHVzZVByb2dyYW0gPSBnbFVz
ZVByb2dyYW07CisgICAgdmFsaWRhdGVQcm9ncmFtID0gZ2xWYWxpZGF0ZVByb2dyYW07CisgICAg
dmVydGV4QXR0cmliMWYgPSBnbFZlcnRleEF0dHJpYjFmOworICAgIHZlcnRleEF0dHJpYjFmdiA9
IGdsVmVydGV4QXR0cmliMWZ2OworICAgIHZlcnRleEF0dHJpYjJmID0gZ2xWZXJ0ZXhBdHRyaWIy
ZjsKKyAgICB2ZXJ0ZXhBdHRyaWIyZnYgPSBnbFZlcnRleEF0dHJpYjJmdjsKKyAgICB2ZXJ0ZXhB
dHRyaWIzZiA9IGdsVmVydGV4QXR0cmliM2Y7CisgICAgdmVydGV4QXR0cmliM2Z2ID0gZ2xWZXJ0
ZXhBdHRyaWIzZnY7CisgICAgdmVydGV4QXR0cmliNGYgPSBnbFZlcnRleEF0dHJpYjRmOworICAg
IHZlcnRleEF0dHJpYjRmdiA9IGdsVmVydGV4QXR0cmliNGZ2OworICAgIHZlcnRleEF0dHJpYlBv
aW50ZXIgPSBnbFZlcnRleEF0dHJpYlBvaW50ZXI7CisjZW5kaWYKKworICAgIGlmICghbV92YWxp
ZCkgeworICAgICAgICBxV2FybmluZygiR3JhcGhpY3NDb250ZXh0M0Q6IEFsbCBuZWVkZWQgT3Bl
bkdMIGV4dGVuc2lvbnMgYXJlIG5vdCBhdmFpbGFibGUiKTsKKyAgICAgICAgbV92YWxpZCA9IGZh
bHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Cisg
ICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgMSwgMSwgMCwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKKworICAgIGdlbkZyYW1lYnVmZmVycygxLCAmbV9tYWluRmJvKTsKKyAgICBt
X2N1cnJlbnRGYm8gPSBtX21haW5GYm87CisKKyAgICBiaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX21haW5GYm8pOworCisgICAgZ2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgYmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKyNpZmRlZiBHTF9ERVBUSF9DT01Q
T05FTlQyNAorICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMjQsIDEsIDEpOworI2Vsc2UKKyAgICByZW5kZXJi
dWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX0RFUFRIX0NP
TVBPTkVOVDE2LCAxLCAxKTsKKyNlbmRpZgorCisgICAgYmluZFJlbmRlcmJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAKKyAgICBmcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCBtX2RlcHRoQnVmZmVyKTsKKyAgICBnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisKKyAg
ICBpZiAoY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAg
ICBxV2FybmluZygpIDw8ICJHcmFwaGljc0NvbnRleHQzRDogSW52YWxpZCBGQk8iIDw8IGNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKTsKKyAgICAg
ICAgbV92YWxpZCA9IGZhbHNlOworICAgIH0KK30KKworR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQoreworICAgIGRlbGV0ZSBtX2dsV2lkZ2V0
OworICAgIG1fZ2xXaWRnZXQgPSAwOworfQorCit2b2lkKiBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpnZXRQcm9jQWRkcmVzcyhjb25zdCBRR0xDb250ZXh0KiBjdHgsIGNvbnN0IFFTdHJpbmcm
IHByb2MpCit7CisgICAgUVN0cmluZyBleHRbM10gPSB7ICIiLCAiQVJCIiwgIkVYVCIgfTsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgIHZvaWQqIGFkZHIgPSBj
dHgtPmdldFByb2NBZGRyZXNzKFFMYXRpbjFTdHJpbmcoKHByb2MgKyBleHRbaV0pLnRvTGF0aW4x
KCkpKTsKKyAgICAgICAgaWYgKGFkZHIpIAorICAgICAgICAgICAgcmV0dXJuIGFkZHI7CisgICAg
fQorCisgICAgcVdhcm5pbmcoKSA8PCAiR3JhcGhpY3NDb250ZXh0M0Q6IG5vdCBmb3VuZCIgPDwg
cHJvYzsKKworICAgIG1fdmFsaWQgPSBmYWxzZTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKK3sKKyAgICBPd25QdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzKSk7CisgICAgcmV0dXJu
IGNvbnRleHQtPm1faW50ZXJuYWwgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7Cit9CisKK0dyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRycykKKyAgICA6IG1faW50ZXJuYWwobmV3IEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwoYXR0cnMpKQoreworICAgIGlmICghbV9pbnRlcm5hbC0+aXNWYWxpZCgpKSAKKyAgICAgICAg
bV9pbnRlcm5hbCA9IDA7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0
M0QoKQoreworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNE
OjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+
bV9nbFdpZGdldDsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6cGxh
dGZvcm1UZXh0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV90ZXh0dXJl
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBI
VE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CisgICAgSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKworICAgIG1faW50ZXJuYWwt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1faW50ZXJu
YWwtPm1fbWFpbkZibyk7CisKKyAgICBnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgbV9pbnRlcm5hbC0+
bV9waXhlbHMuYml0cygpKTsKKworICAgIFFQYWludGVyKiBwID0gaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgcC0+ZHJhd0ltYWdlKDAsIDAsIG1faW50ZXJu
YWwtPm1fcGl4ZWxzLnRyYW5zZm9ybWVkKFFNYXRyaXgoKS5yb3RhdGUoMTgwKSkpOworCisgICAg
bV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9pbnRlcm5hbC0+bV9jdXJyZW50RmJvKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZW5kUGFpbnQoKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoKCh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0
aCkgJiYgKGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpKSB8fCAoIW1faW50ZXJuYWwpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKKyAgICBtX2N1
cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CisKKyAgICBtX2ludGVybmFsLT5tX3BpeGVscyA9IFFJbWFn
ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIp
OworCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm5hbC0+bV90ZXh0dXJlKTsKKyAgICBn
bFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKKyAgIAorICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1faW50ZXJuYWwtPm1fbWFpbkZibyk7CisgICAgbV9p
bnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBtX2ludGVybmFsLT5tX2RlcHRoQnVmZmVyKTsKKyNpZmRlZiBHTF9ERVBUSF9DT01QT05FTlQy
NAorICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UiwgR0xfREVQVEhfQ09NUE9ORU5UMjQsIHdpZHRoLCBoZWlnaHQpOworI2Vsc2UKKyAgICByZW5k
ZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX0RFUFRI
X0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgorICAgIG1faW50ZXJuYWwtPmJp
bmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisgICAg
CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RF
WFRVUkVfMkQsIG1faW50ZXJuYWwtPm1fdGV4dHVyZSwgMCk7CisgICAgbV9pbnRlcm5hbC0+ZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgbV9pbnRlcm5hbC0+bV9kZXB0aEJ1ZmZlcik7CisKKyAgICBHTGVudW0gc3RhdHVz
ID0gbV9pbnRlcm5hbC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlOiBJbnZhbGlkIEZCTyIgPDwgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpOworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIH0KKworICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisgICAgZ2xGbHVzaCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxv
bmcgdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNo
YWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5h
dHRhY2hTaGFkZXIoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIChHTHVpbnQpIHNoYWRlci0+
b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRp
b24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJp
bmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YmluZEF0dHJpYkxvY2F0aW9u
KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRh
cmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZm
ZXIgPyAoR0x1aW50KSBidWZmZXItPm9iamVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xGcmFt
ZWJ1ZmZlciogYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgbV9pbnRlcm5hbC0+bV9jdXJyZW50RmJvID0gKGJ1ZmZlciAmJiBidWZmZXIt
Pm9iamVjdCgpKSA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiBtX2ludGVybmFsLT5tX21h
aW5GYm87CisgICAgbV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgbV9pbnRlcm5h
bC0+bV9jdXJyZW50RmJvKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRl
cmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1
ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZmZXIgPyAoR0x1
aW50KSByZW5kZXJidWZmZXItPm9iamVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRl
eHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSA/IChHTHVpbnQpIHRleHR1cmUtPm9iamVj
dCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IoZG91Ymxl
IHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xCbGVuZENvbG9yKHN0
YXRpY19jYXN0PGZsb2F0PihyZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW4pLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQmxlbmRF
cXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlv
blNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2ZhY3Rvciwg
dW5zaWduZWQgbG9uZyBkZmFjdG9yKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgZ2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9ICAgICAg
IAorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBs
b25nIHNyY1JHQiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3JjQWxwaGEs
IHVuc2lnbmVkIGxvbmcgZHN0QWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0Is
IGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVuc2lnbmVkIGxv
bmcgdXNhZ2UpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBXZWJHTEFycmF5KiBhcnJheSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBpZiAoIWFy
cmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJ1ZmZl
ckRhdGEodGFyZ2V0LCBhcnJheS0+Ynl0ZUxlbmd0aCgpLCBhcnJheS0+YmFzZUFkZHJlc3MoKSwg
dXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgV2ViR0xBcnJheSogYXJyYXkpCit7CisgICAg
aWYgKCFhcnJheSB8fCAhYXJyYXktPmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheS0+Ynl0ZUxlbmd0aCgpLCBhcnJh
eS0+YmFzZUFkZHJlc3MoKSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5h
bC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjbGVhckNvbG9yKGRvdWJsZSByLCBkb3VibGUgZywgZG91YmxlIGIsIGRvdWJsZSBh
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xD
bGVhckNvbG9yKHN0YXRpY19jYXN0PGZsb2F0PihyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGcpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oYiksIHN0YXRpY19jYXN0PGZsb2F0PihhKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQ2xlYXIobWFzayk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisjaWYgZGVmaW5lZChR
VF9PUEVOR0xfRVNfMikKKyAgICBnbENsZWFyRGVwdGhmKGRlcHRoKTsKKyNlbHNlCisgICAgZ2xD
bGVhckRlcHRoKGRlcHRoKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
bGVhclN0ZW5jaWwobG9uZyBzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgZ2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFs
cGhhKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgQVNT
RVJUKHNoYWRlcik7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT5jb21waWxlU2hhZGVyKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBs
b25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBs
b25nIGJvcmRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgs
IHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNvcHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25n
IHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDdWxsRmFjZShtb2RlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYykK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRGVw
dGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soYm9v
bCBmbGFnKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xEZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRo
UmFuZ2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAg
Z2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7CisjZWxzZQorICAgIGdsRGVwdGhSYW5nZSh6TmVh
ciwgekZhcik7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hh
ZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBB
U1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZXRhY2hTaGFkZXIoKEdM
dWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xEaXNhYmxl
KGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyh1bnNpZ25l
ZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERyYXdBcnJheXMobW9kZSwgZmlyc3Qs
IGNvdW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKHVuc2ln
bmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBs
b25nIG9mZnNldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIGdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjplbmFibGUodW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEVuYWJsZShjYXApOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBs
b25nIGluZGV4KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xGaW5pc2goKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Zmx1c2goKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgZ2xGbHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpm
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5k
ZXJidWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwg
YXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIgPyAoR0x1aW50KSBidWZmZXIt
Pm9iamVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVy
VGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQs
IHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIGxvbmcgbGV2
ZWwpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X2ludGVybmFsLT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRh
cmdldCwgdGV4dHVyZSA/IChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpIDogMCwgbGV2ZWwpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UodW5zaWduZWQgbG9uZyBtb2Rl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xG
cm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlw
bWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAg
ICBpZiAoIXByb2dyYW0tPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50IG1heExlbmd0aDsK
KyAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1aW50Pihwcm9ncmFt
LT5vYmplY3QoKSksIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heExlbmd0aCk7
CisKKyAgICBHTGNoYXIgbmFtZVttYXhMZW5ndGhdOyAKKyAgICBHTHNpemVpIG5hbWVMZW5ndGg7
CisgICAgR0xpbnQgc2l6ZTsKKyAgICBHTGVudW0gdHlwZTsKKworICAgIG1faW50ZXJuYWwtPmdl
dEFjdGl2ZUF0dHJpYihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgaW5k
ZXgsIG1heExlbmd0aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisKKyAgICBp
ZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluZm8ubmFtZSA9
IFN0cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGlu
Zm8uc2l6ZSA9IHNpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNp
Z25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbS0+
b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbWF4TGVuZ3RoOworICAgIG1faW50ZXJuYWwt
PmdldFByb2dyYW1pdihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgR0xf
QUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heExlbmd0aCk7CisKKyAgICBHTGNoYXIgbmFt
ZVttYXhMZW5ndGhdOworICAgIEdMc2l6ZWkgbmFtZUxlbmd0aDsKKyAgICBHTGludCBzaXplOwor
ICAgIEdMZW51bSB0eXBlOworCisgICAgbV9pbnRlcm5hbC0+Z2V0QWN0aXZlVW5pZm9ybShzdGF0
aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgaW5kZXgsIG1heExlbmd0aCwgJm5h
bWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisKKyAgICBpZiAoIW5hbWVMZW5ndGgpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLCBuYW1l
TGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJM
b2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAtMTsKKyAgICAKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRB
dHRyaWJMb2NhdGlvbigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV9h
dHRyczsKK30KKwordW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQor
eworICAgIGlmIChtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7Cisg
ICAgICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBpdGVyID0gbV9pbnRl
cm5hbC0+bV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBl
cnIgPSAqaXRlcjsKKyAgICAgICAgbV9pbnRlcm5hbC0+bV9zeW50aGV0aWNFcnJvcnMucmVtb3Zl
KGl0ZXIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsR2V0RXJyb3IoKTsKK30KKwor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJu
IFN0cmluZygoY29uc3QgY2hhciopIGdsR2V0U3RyaW5nKG5hbWUpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6aGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBt
b2RlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
Z2xIaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVm
ZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5pc0J1ZmZlcigoR0x1aW50KSBidWZmZXItPm9i
amVjdCgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKHVuc2lnbmVk
IGxvbmcgY2FwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgcmV0dXJuIGdsSXNFbmFibGVkKGNhcCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAg
aWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwt
PmlzRnJhbWVidWZmZXIoKEdMdWludCkgZnJhbWVidWZmZXItPm9iamVjdCgpKTsKK30KKworYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sK
KyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFs
LT5pc1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVm
ZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1
cm4gbV9pbnRlcm5hbC0+aXNSZW5kZXJidWZmZXIoKEdMdWludCkgcmVuZGVyYnVmZmVyLT5vYmpl
Y3QoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFdlYkdMU2hhZGVy
KiBzaGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVy
biBtX2ludGVybmFsLT5pc1NoYWRlcigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpKTsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkK
K3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBnbElzVGV4
dHVyZSgoR0x1aW50KSB0ZXh0dXJlLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmxpbmVXaWR0aChkb3VibGUgd2lkdGgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbExpbmVXaWR0aChzdGF0aWNfY2FzdDxmbG9hdD4o
d2lkdGgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmxpbmtQcm9ncmFt
KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsUGl4ZWxTdG9yZWko
cG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNl
dChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFBvbHlnb25PZmZzZXQoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGZhY3RvciksIHN0YXRpY19jYXN0PGZsb2F0Pih1bml0cykpOworfQorCitQYXNzUmVmUHRy
PFdlYkdMQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9u
ZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIAorICAgIGlmICh0eXBlICE9IEdMX1VOU0lHTkVEX0JZ
VEUgfHwgZm9ybWF0ICE9IEdMX1JHQkEpCisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAg
ICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gYXJyYXkgPSBXZWJHTFVuc2lnbmVkQnl0
ZUFycmF5OjpjcmVhdGUod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICBnbFJlYWRQaXhlbHMoeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAoR0x2b2lkKikgYXJyYXktPmRhdGEoKSk7
CisgICAgcmV0dXJuIGFycmF5OyAgICAKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9pbnRlcm5hbC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292
ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU2FtcGxlQ292ZXJhZ2Uoc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHZhbHVlKSwgaW52ZXJ0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Np
c3Nvcihsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0
cmluZykKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgLy8gRm9yY2UgdG8gR0xTTCAxLjA6CisgICAg
Ly8gaHR0cHM6Ly9jdnMua2hyb25vcy5vcmcvc3ZuL3JlcG9zL3JlZ2lzdHJ5L3RydW5rL3B1Ymxp
Yy93ZWJnbC9kb2Mvc3BlYy9XZWJHTC1zcGVjLmh0bWwjNC40CisgICAgLy8gRklYTUU6IExpbmVz
IGJlZ2lubmluZyB3aXRoICIjdmVyc2lvbiIgc2hvdWxkIGJlIHN0cmlwcGVkIG91dC4KKworICAg
IFN0cmluZyBwcmVwYXJlZDsKKyAgIAorICAgIHByZXBhcmVkLmFwcGVuZCgiI3ZlcnNpb24gMTAw
XG4iKTsKKyNpZmRlZiBRVF9PUEVOR0xfRVNfMgorICAgIHByZXBhcmVkLmFwcGVuZCgicHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7XG4iKTsKKyNlbmRpZgorICAgIHByZXBhcmVkLmFwcGVuZChzdHJp
bmcpOworCisgICAgY29uc3QgQ1N0cmluZyYgY3MgPSBwcmVwYXJlZC51dGY4KCk7CisgICAgY29u
c3QgY2hhciogcyA9IGNzLmRhdGEoKTsKKyAgICBpbnQgbGVuZ3RoID0gcHJlcGFyZWQubGVuZ3Ro
KCk7CisgICAgbV9pbnRlcm5hbC0+c2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0
KCksIDEsICZzLCAmbGVuZ3RoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xTdGVu
Y2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmdW5j
LCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbEZ1bmNTZXBhcmF0
ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFj
ZSwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBt
YXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKHVuc2lnbmVkIGxv
bmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU3RlbmNpbE9w
KGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5j
aWxPcFNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNp
Z25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbE9wU2Vw
YXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dGV4UGFyYW1ldGVyZih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBmbG9h
dCB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIGdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2FzdDxmbG9hdD4odmFs
dWUpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaSh1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0xZihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCkKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0x
Zihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2
KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMWZ2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3Jt
MmYobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZv
cm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT51bmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50
IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT51bmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwg
ZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00Zihsb2NhdGlvbiwg
djAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2
KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtNGZ2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0xaShsb25nIGxvY2F0aW9uLCBpbnQgdjApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMWkobG9jYXRpb24s
IHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0
aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xaXYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKGxvbmcg
bG9jYXRpb24sIGludCB2MCwgaW50IHYxKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwg
djEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KGxvbmcgbG9jYXRp
b24sIGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6
ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2kobG9uZyBs
b2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGludCB2MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zaShsb2NhdGlv
biwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYo
bG9uZyBsb2NhdGlvbiwgaW50KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtM2l2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm00aShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyLCBpbnQgdjMpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT51bmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBib29sIHRy
YW5zcG9zZSwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBm
bG9hdCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwg
c2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiBhcnJh
eSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFu
c3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIAorICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
dXNlUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7Cisg
ICAgQVNTRVJUKHByb2dyYW0pOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmFsaWRhdGVQcm9ncmFtKChHTHVpbnQpIHBy
b2dyYW0tPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMWYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjFm
KGluZHgsIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2
KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFycmF5KQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMWZ2
KGluZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
MmYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhB
dHRyaWIyZihpbmR4LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0
ZXhBdHRyaWIyZnYoaW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxv
YXQgdjIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIzZihpbmR4LCB2MCwgdjEsIHYyKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwg
ZmxvYXQqIGFycmF5KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliM2Z2KGluZHgsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0
dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFycmF5KQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+dmVydGV4QXR0cmliNGZ2KGluZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBzaXplLCBp
bnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQg
bG9uZyBvZmZzZXQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUs
IG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3Bv
cnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
Z2xWaWV3cG9ydChzdGF0aWNfY2FzdDxHTGludD4oeCksIHN0YXRpY19jYXN0PEdMaW50Pih5KSwg
c3RhdGljX2Nhc3Q8R0xzaXplaT4od2lkdGgpLCBzdGF0aWNfY2FzdDxHTHNpemVpPihoZWlnaHQp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9u
ZyBwbmFtZSwgdW5zaWduZWQgY2hhciogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0
QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRGbG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xH
ZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNo
bWVudCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50
ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0SW50ZWdlcnYocG5hbWUsIHZh
bHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdl
dFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgcG5hbWUsIHZhbHVlKTsKK30K
KworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dy
YW0qIHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKworICAgIEdMaW50IGxlbmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtaXYoKEdM
dWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisK
KyAgICBHTHNpemVpIHNpemU7CisKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1h
bGxvYyhsZW5ndGgpOworICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJuICIiOworCisgICAg
bV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbUluZm9Mb2coKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCks
IGxlbmd0aCwgJnNpemUsIGluZm8pOworCisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKKyAgICBm
YXN0RnJlZShpbmZvKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRTaGFkZXJpdihXZWJHTFNoYWRlciogc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBu
YW1lLCBpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVyaXYo
KEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgcG5hbWUsIHZhbHVlKTsKK30KKworU3RyaW5nIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50
IGxlbmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9i
amVjdCgpLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworCisgICAgR0xzaXplaSBzaXpl
OworICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CisgICAg
aWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBtX2ludGVybmFsLT5nZXRTaGFk
ZXJJbmZvTG9nKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8p
OworCisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZvKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50IGxlbmd0aDsKKyAgICBtX2ludGVybmFsLT5n
ZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBHTF9TSEFERVJfU09VUkNFX0xF
TkdUSCwgJmxlbmd0aCk7CisKKyAgICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFyKiBpbmZvID0g
KEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoIWluZm8pCisgICAgICAgIHJl
dHVybiAiIjsKKworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlclNvdXJjZSgoR0x1aW50KSBzaGFk
ZXItPm9iamVjdCgpLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKKworICAgIFN0cmluZyByZXN1bHQo
aW5mbyk7CisgICAgZmFzdEZyZWUoaW5mbyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJmdih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRl
eFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBp
bnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0qIHByb2dyYW0s
IGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1mdigoR0x1aW50
KSBwcm9ncmFtLT5vYmplY3QoKSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2Nh
dGlvbiwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1pdigoR0x1aW50KSBwcm9ncmFtLT5v
YmplY3QoKSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKworbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRVbmlmb3Jt
TG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIG5hbWUudXRmOCgpLmRhdGEoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVk
IGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdl
dFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25l
ZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VmVydGV4QXR0cmliaXYoaW5kZXgs
IHBuYW1lLCB2YWx1ZSk7Cit9CisKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0
dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgCisgICAgdm9p
ZCogcG9pbnRlcjsKKyAgICBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRl
eCwgcG5hbWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxsb25nPihw
b2ludGVyKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1h
dCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQoreworICAgIGdsVGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQz
RDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBJbWFnZSogaW1h
Z2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK3sKKyAgICBBU1NFUlQoaW1h
Z2UpOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisK
KyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIEdMdWludCBmb3JtYXQ7CisgICAg
R0x1aW50IGludGVybmFsRm9ybWF0OworCisgICAgaWYgKCFleHRyYWN0SW1hZ2VEYXRhKGltYWdl
LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgaW1hZ2VEYXRhLCAmZm9ybWF0LCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmludGVybmFsRm9ybWF0KSkgeworICAgICAgICBxV2FybmluZygp
IDw8ICJHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRDogY291bGQgbm90IGV4dHJhY3QgSW1h
Z2UgZGF0YSI7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBnbFRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVp
Z2h0KCksIAorICAgICAgICAgICAgICAgICAwLCBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGlt
YWdlRGF0YS5kYXRhKCkpOworCisgICAgcmV0dXJuIDA7Cit9CisgICAgCitpbnQgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwg
dW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7Cisg
ICAgZ2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IEdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2
ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlw
WSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQoreworICAgIEFTU0VSVChpbWFnZSk7CisKKyAgICBW
ZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIEdMdWludCBmb3JtYXQ7CisgICAgR0x1aW50
IGludGVybmFsRm9ybWF0OworCisgICAgaWYgKCFleHRyYWN0SW1hZ2VEYXRhKGltYWdlLCBmbGlw
WSwgcHJlbXVsdGlwbHlBbHBoYSwgaW1hZ2VEYXRhLCAmZm9ybWF0LCAmaW50ZXJuYWxGb3JtYXQp
KSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFn
ZTJEOiBjb3VsZCBub3QgZXh0cmFjdCBJbWFnZSBkYXRhIjsKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH0KKworICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCBp
bWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAKKyAgICAgICAgICAgICAgICAgICAgZm9y
bWF0LCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKKworICAgIHJldHVybiAw
OworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIEdMdWludCBvOwor
ICAgIG1faW50ZXJuYWwtPmdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit1
bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgR0x1aW50IG87CisgICAg
bV9pbnRlcm5hbC0+Z2VuRnJhbWVidWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwor
dW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwt
PmNyZWF0ZVByb2dyYW0oKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBHTHVpbnQgbzsKKyAgICBtX2ludGVybmFsLT5nZW5SZW5kZXJidWZmZXJzKDEs
ICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlU2hhZGVy
KCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJU
RVhfU0hBREVSKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1
cmUoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
R0x1aW50IG87CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT5kZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0
ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkZWxldGVQcm9ncmFtKHVuc2lnbmVkIHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVQcm9ncmFt
KHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZm
ZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
cmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVy
KHVuc2lnbmVkIHNoYWRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVRl
eHR1cmVzKDEsICZ0ZXh0dXJlKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpzaXplSW5C
eXRlcyhpbnQgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdMX0JZVEU6
CisgICAgICAgIHJldHVybiBzaXplb2YoR0xieXRlKTsKKyAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1Ynl0ZSk7CisgICAgY2FzZSBHTF9TSE9SVDoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihHTHNob3J0KTsKKyAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdXNob3J0KTsKKyAgICBjYXNlIEdMX0lOVDoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7CisgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6
CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJy
b3IodW5zaWduZWQgbG9uZyBlcnJvcikKK3sKKyAgICBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vy
cm9ycy5hZGQoZXJyb3IpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURh
dGEoSW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sKiBoYXNBbHBoYUNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWxwaGFPcCogbmVlZGVkQWxwaGFPcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGZvcm1hdCkKK3sKKyAgICBRSW1h
Z2U6OkZvcm1hdCBpbWFnZUZvcm1hdCA9ICghcHJlbXVsdGlwbHlBbHBoYSkgPyAKKyAgICAgICAg
UUltYWdlOjpGb3JtYXRfQVJHQjMyIDoKKyAgICAgICAgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1By
ZW11bHRpcGxpZWQ7CisgCisgICAgUVBpeG1hcCogbmF0aXZlUGl4bWFwID0gaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7IAorCisgICAgKmhhc0FscGhhQ2hhbm5lbCA9IHRydWU7
CisgICAgKm5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7CisgICAgKmZvcm1hdCA9IEdM
X1JHQkE7CisKKyAgICBRSW1hZ2UgbmF0aXZlSW1hZ2UgPSBuYXRpdmVQaXhtYXAtPnRvSW1hZ2Uo
KS5jb252ZXJ0VG9Gb3JtYXQoaW1hZ2VGb3JtYXQpOworICAgIG91dHB1dFZlY3Rvci5hcHBlbmQo
bmF0aXZlSW1hZ2UuYml0cygpLCBuYXRpdmVJbWFnZS5ieXRlQ291bnQoKSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKZGlmZiAtLWdp
dCBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYnNl
dHRpbmdzLmNwcAppbmRleCBkNjBmMDljLi5lNmZkZjYxIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQv
QXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3Bw
CkBAIC0xNTgsNiArMTU4LDEzIEBAIHZvaWQgUVdlYlNldHRpbmdzUHJpdmF0ZTo6YXBwbHkoKQog
CiAgICAgICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh2YWx1
ZSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgICAgICB2YWx1ZSA9IGF0dHJp
YnV0ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbG9iYWwtPmF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpX
ZWJHTEVuYWJsZWQpKTsKKworICAgICAgICBzZXR0aW5ncy0+c2V0V2ViR0xFbmFibGVkKHZhbHVl
KTsKKyNlbmRpZgorIAogICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRp
bmdzOjpKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OkphdmFz
Y3JpcHRDYW5PcGVuV2luZG93cykpOwogICAgICAgICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdENh
bk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSh2YWx1ZSk7CkBAIC00MDEsNiArNDA4LDcgQEAgUVdl
YlNldHRpbmdzOjpRV2ViU2V0dGluZ3MoKQogICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJT
ZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscywgZmFsc2UpOwogICAgIGQt
PmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzRmls
ZVVybHMsIHRydWUpOwogICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIGZhbHNlKTsKKyAgICBkLT5hdHRyaWJ1dGVzLmlu
c2VydChRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgZmFsc2UpOwogICAgIGQtPm9mZmxpbmVT
dG9yYWdlRGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAgIGQtPmRlZmF1bHRUZXh0
RW5jb2RpbmcgPSBRTGF0aW4xU3RyaW5nKCJpc28tODg1OS0xIik7CiB9CmRpZmYgLS1naXQgYS9X
ZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3Mu
aAppbmRleCBiMWY1Y2YyLi4yOWMwMWI2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJz
ZXR0aW5ncy5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgKQEAgLTcwLDcgKzcw
LDggQEAgcHVibGljOgogICAgICAgICBMb2NhbENvbnRlbnRDYW5BY2Nlc3NGaWxlVXJscywKICAg
ICAgICAgRG5zUHJlZmV0Y2hFbmFibGVkLAogICAgICAgICBYU1NBdWRpdG9yRW5hYmxlZCwKLSAg
ICAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQKKyAgICAgICAgQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQsCisgICAgICAgIFdlYkdMRW5hYmxlZAogICAgIH07CiAgICAgZW51
bSBXZWJHcmFwaGljIHsKICAgICAgICAgTWlzc2luZ0ltYWdlR3JhcGhpYywKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDJkMWE0ODMu
LjM3ODRlYzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEwLTAyLTIzICBKYXJra28gU2Fra2luZW4g
IDxqYXJra28uc2Fra2luZW5AdGlldG8uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFF0IFdlYkdMIHN1cHBvcnQKKworICAgICAgICBBZGRzIGVu
YWJsaW5nIGFuZCBkaXNhYmxpbmcgb2YgV2ViR0wgc3VwcG9ydCB0byBRV2ViU2V0dGluZ3MuCisJ
CUFkZHMgJy0td2ViZ2wnIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgdG8gUUdWTGF1bmNoZXIuCisJ
CWh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTE1MworCisgICAgICAg
ICogQXBpL3F3ZWJzZXR0aW5ncy5jcHA6CisgICAgICAgIChRV2ViU2V0dGluZ3NQcml2YXRlOjph
cHBseSk6CisgICAgICAgIChRV2ViU2V0dGluZ3M6OlFXZWJTZXR0aW5ncyk6CisgICAgICAgICog
QXBpL3F3ZWJzZXR0aW5ncy5oOgorICAgICAgICAqIFFHVkxhdW5jaGVyL21haW4uY3BwOgorICAg
ICAgICAobWFpbik6CisKIDIwMTAtMDItMjMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L1FHVkxhdW5jaGVyL21haW4uY3BwIGIvV2ViS2l0L3F0L1FHVkxhdW5jaGVyL21h
aW4uY3BwCmluZGV4IDQ0OGI0YjAuLjMwN2UxMTggMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9RR1ZM
YXVuY2hlci9tYWluLmNwcAorKysgYi9XZWJLaXQvcXQvUUdWTGF1bmNoZXIvbWFpbi5jcHAKQEAg
LTUyMSw2ICs1MjEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAg
IHVybCA9IGFyZ3MuYXQoMSk7CiAgICAgaWYgKGFyZ3MuY29udGFpbnMoIi0tY29tcG9zaXRpbmci
KSkKICAgICAgICAgUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUo
UVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgdHJ1ZSk7CisgICAg
aWYgKGFyZ3MuY29udGFpbnMoIi0td2ViZ2wiKSkKKyAgICAgICAgUVdlYlNldHRpbmdzOjpnbG9i
YWxTZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsIHRy
dWUpOwogCiAgICAgTWFpbldpbmRvdyogd2luZG93ID0gbmV3IE1haW5XaW5kb3c7CiAgICAgd2lu
ZG93LT5sb2FkKHVybCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJL
aXRUb29scy9DaGFuZ2VMb2cKaW5kZXggZTA2NjUxOS4uNjU0MmVhZiAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDEwLTAyLTIzICBKYXJra28gU2Fra2luZW4gIDxqYXJra28uc2Fra2luZW5AdGll
dG8uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFF0IFdlYkdMIHN1cHBvcnQKKworICAgICAgICBBZGRzIHRvZ2dsaW5nIG9mIFdlYkdMIHN1cHBv
cnQgdG8gUXRMYXVuY2hlci4KKwkJaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM1MTUzCisKKyAgICAgICAgKiBRdExhdW5jaGVyL21haW4uY3BwOgorICAgICAgICAoTGF1
bmNoZXJXaW5kb3c6OnRvZ2dsZVdlYkdMKToKKyAgICAgICAgKExhdW5jaGVyV2luZG93OjpzZXR1
cFVJKToKKwogMjAxMC0wMi0yMyAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4u
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9RdExhdW5jaGVyL21haW4uY3BwIGIvV2ViS2l0VG9v
bHMvUXRMYXVuY2hlci9tYWluLmNwcAppbmRleCAxMjAzY2U3Li5iOGE2NzFiIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9RdExhdW5jaGVyL21haW4uY3BwCisrKyBiL1dlYktpdFRvb2xzL1F0TGF1
bmNoZXIvbWFpbi5jcHAKQEAgLTExNiw2ICsxMTYsNyBAQCBwcm90ZWN0ZWQgc2xvdHM6CiAKICAg
ICB2b2lkIHNldFRvdWNoTW9ja2luZyhib29sIG9uKTsKICAgICB2b2lkIHRvZ2dsZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoYm9vbCB0b2dnbGUpOworICAgIHZvaWQgdG9nZ2xlV2ViR0woYm9vbCB0
b2dnbGUpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVZpZXcoYm9vbCB1c2VHcmFwaGljc1ZpZXcgPSBm
YWxzZSk7CiAKIHB1YmxpYyBzbG90czoKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBMYXVuY2hl
cldpbmRvdzo6dG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIHRvZ2dsZSkKICAgICBw
YWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdFbmFibGVkLCB0b2dnbGUpOwogfQogCit2b2lkIExhdW5jaGVyV2luZG93Ojp0
b2dnbGVXZWJHTChib29sIHRvZ2dsZSkKK3sKKyAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0
dHJpYnV0ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgdG9nZ2xlKTsKK30KKwogdm9pZCBM
YXVuY2hlcldpbmRvdzo6aW5pdGlhbGl6ZVZpZXcoYm9vbCB1c2VHcmFwaGljc1ZpZXcpCiB7CiAg
ICAgZGVsZXRlIG1fdmlldzsKQEAgLTU1NCw2ICs1NjAsMTAgQEAgdm9pZCBMYXVuY2hlcldpbmRv
dzo6c2V0dXBVSSgpCiAgICAgdG9nZ2xlR3JhcGhpY3NWaWV3LT5zZXRDaGVja2FibGUodHJ1ZSk7
CiAgICAgdG9nZ2xlR3JhcGhpY3NWaWV3LT5zZXRDaGVja2VkKGZhbHNlKTsKIAorICAgIFFBY3Rp
b24qIHRvZ2dsZVdlYkdMID0gdG9vbHNNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSBXZWJHTCIsIHRo
aXMsIFNMT1QodG9nZ2xlV2ViR0woYm9vbCkpKTsKKyAgICB0b2dnbGVXZWJHTC0+c2V0Q2hlY2th
YmxlKHRydWUpOworICAgIHRvZ2dsZVdlYkdMLT5zZXRDaGVja2VkKGZhbHNlKTsKKwogICAgIFFB
Y3Rpb24qIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcgPSBncmFwaGljc1ZpZXdNZW51LT5h
ZGRBY3Rpb24oIlRvZ2dsZSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZyIsIHRoaXMsIFNMT1QodG9n
Z2xlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sKSkpOwogICAgIHRvZ2dsZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmctPnNldENoZWNrYWJsZSh0cnVlKTsKICAgICB0b2dnbGVBY2NlbGVyYXRlZENv
bXBvc2l0aW5nLT5zZXRDaGVja2VkKGZhbHNlKTsKQEAgLTU2OSw2ICs1NzksOCBAQCB2b2lkIExh
dW5jaGVyV2luZG93OjpzZXR1cFVJKCkKICAgICBmbGlwWUFuaW1hdGVkID0gZ3JhcGhpY3NWaWV3
TWVudS0+YWRkQWN0aW9uKCJBbmltYXRlZCBZLUZsaXAiKTsKICAgICBmbGlwWUFuaW1hdGVkLT5j
b25uZWN0KHRvZ2dsZUdyYXBoaWNzVmlldywgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNl
dEVuYWJsZWQoYm9vbCkpKTsKICAgICBmbGlwWUFuaW1hdGVkLT5zZXRFbmFibGVkKGZhbHNlKTsK
KworCiB9CiAKIFFXZWJQYWdlKiBXZWJQYWdlOjpjcmVhdGVXaW5kb3coUVdlYlBhZ2U6OldlYldp
bmRvd1R5cGUgdHlwZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49302</attachid>
            <date>2010-02-23 10:32:57 -0800</date>
            <delta_ts>2010-02-24 02:53:22 -0800</delta_ts>
            <desc>Qt WebGL support</desc>
            <filename>qt-webgl-support-7.diff</filename>
            <type>text/plain</type>
            <size>85824</size>
            <attacher name="Jarkko Sakkinen">jarkko.sakkinen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjA2ZGIxZS4uZTk2NWQ1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzEgQEAKKzIwMTAtMDItMjMgIEphcmtrbyBTYWtr
aW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXQgV2ViR0wgc3VwcG9ydAorCisgICAgICAgIEFk
ZHMgR3JhcGhpY3NDb250ZXh0M0QgUXRXZWJLaXQgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTE1MworCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
Ojppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvY0FkZHJlc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Ymxl
bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlv
blNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1
bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFy
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpjb2xvck1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRo
RnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2Vu
ZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFj
dGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0
aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0
cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENv
bnRleHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjppc1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojppc1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6c3RlbmNpbE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnN0ZW5jaWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRl
eFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2
YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBv
aW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVn
ZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9n
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hh
ZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcklu
Zm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1l
dGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFt
ZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3Jt
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmli
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJp
Yk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisKIDIwMTAtMDItMjMgIFRvbnkgQ2hhbmcgIDx0
b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUucHJpIGIvV2ViQ29yZS9XZWJDb3JlLnByaQppbmRleCAyN2YxYmI2Li5m
Yzc5ZjhkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcmkKQEAgLTI4Nyw4ICsyODcsMTcgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICBodG1s
L2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5pZGwgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwgXAorICAgIGh0bWwv
Y2FudmFzL1dlYkdMQnVmZmVyLmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaWRsIFwKKyAg
ICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmJ1ZmZlci5pZGwgXAogICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5p
ZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbCBcCiAgICAgaHRtbC9jYW52YXMv
V2ViR0xTaG9ydEFycmF5LmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmlkbCBc
CisgICAgaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsIFwKICAgICBodG1sL2Nh
bnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xV
bnNpZ25lZEludEFycmF5LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0
QXJyYXkuaWRsIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IGM2MjUyMjQuLjhjYzk2MWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjY4NSw2ICsyNjg1LDg3IEBA
IFNPVVJDRVMgKz0gXAogfQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfM0RfQ0FOVkFT
PTEpIHsKK1FUICs9IG9wZW5nbAorSEVBREVSUyArPSBcCisJYmluZGluZ3MvanMvSlNXZWJHTEFy
cmF5QnVmZmVyQ29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEFycmF5SGVscGVy
LmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5k
aW5ncy9qcy9KU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pT
V2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFy
cmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25z
dHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3Ry
dWN0b3IuaCBcCisJaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCBcCisJaHRt
bC9jYW52YXMvQ2FudmFzT2JqZWN0LmggXAorCWh0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5o
IFwKKwlodG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdM
QXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xCeXRlQXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIFwK
KwlodG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xGcmFt
ZWJ1ZmZlci5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEdldEluZm8uaCBcCisJaHRtbC9jYW52YXMv
V2ViR0xJbnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaCBcCisJaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmggXAorCWh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmggXAorCWh0bWwvY2FudmFzL1dl
YkdMU2hvcnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaCBcCisJaHRtbC9j
YW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaCBcCisJ
aHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCAKKworU09VUkNFUyArPSBcCisJYmluZGluZ3MvanMv
SlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdM
QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0
b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmlu
ZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pz
L0pTV2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEludEFy
cmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMSW50QXJyYXlDdXN0b20u
Y3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgXAor
CWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5n
cy9qcy9KU1dlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xV
bnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVu
c2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVk
SW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZElu
dEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJh
eUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJh
eUN1c3RvbS5jcHAgXAorCWh0bWwvY2FudmFzL0NhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCBc
CisgICAgaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xB
cnJheUJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXkuY3BwIFwKKwlodG1sL2Nh
bnZhcy9XZWJHTEJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5LmNwcCBc
CisJaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgXAorCWh0bWwvY2FudmFz
L1dlYkdMRmxvYXRBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
IFwKKwlodG1sL2NhbnZhcy9XZWJHTEdldEluZm8uY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTElu
dEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcCBcCisJaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAgXAorCWh0bWwvY2FudmFz
L1dlYkdMU2hvcnRBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAgXAor
CWh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRB
cnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcCBcCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwIFwKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBcCisKK30KKworCiBpbmNsdWRl
KCQkUFdELy4uL1dlYktpdC9xdC9BcGkvaGVhZGVycy5wcmkpCiBpbmNsdWRlKC4uL2luY2x1ZGUv
UXRXZWJLaXQvY2xhc3NoZWFkZXJzLnByaSkKIEhFQURFUlMgKz0gJCRXRUJLSVRfQVBJX0hFQURF
UlMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRl
eCAwYTQxZGM2Li5jZjFkZjcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCkBAIC00NCw2ICs0NCwxMyBAQCB0eXBlZGVmIHZvaWQqIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0Q7CiBjb25zdCAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBOdWxs
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCA9IDA7CiB0eXBlZGVmIEdMdWludCBQbGF0Zm9ybTNE
T2JqZWN0OwogY29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7
CisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRdE9wZW5HTC9RdE9wZW5HTD4KKwordHlw
ZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOworY29uc3QgIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgPSAwOwordHlwZWRl
ZiBpbnQgUGxhdGZvcm0zRE9iamVjdDsKK2NvbnN0IFBsYXRmb3JtM0RPYmplY3QgTnVsbFBsYXRm
b3JtM0RPYmplY3QgPSAwOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRDsKIGNvbnN0ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIE51bGxQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEID0gMDsKQEAgLTczLDcgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIH07CiAKICAgICAvLyBGSVhNRTogaWRlYWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24g
YWxsIHBsYXRmb3Jtcy4KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpZiBQTEFURk9STShDSFJP
TUlVTSkgfHwgUExBVEZPUk0oUVQpCiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDsKICNlbmRpZgogCkBAIC00MDksNiArNDE2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2Vs
aWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0OwogICAgICAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpOwor
ICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OwogI2Vsc2UK
ICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKCkgY29uc3QgeyByZXR1cm4gTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7IH0KICAg
ICAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBO
dWxsUGxhdGZvcm0zRE9iamVjdDsgfQpAQCAtNzA0LDcgKzcxNCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNlbmRpZiAgICAgICAgCiAKICAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgdGhpcyB3
b3VsZCBiZSB1c2VkIG9uIGFsbCBwbGF0Zm9ybXMuCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pCisj
aWYgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKFFUKQogICAgICAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw+IG1faW50ZXJuYWw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMmMwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC0wLDAgKzEs
MTcxOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgVGlldG8gQ29ycG9yYXRpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgICAKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgi
CisjaW5jbHVkZSAiQ2FudmFzT2JqZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZv
LmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisj
aW5jbHVkZSAiV2ViR0xGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5o
IgorI2luY2x1ZGUgIldlYkdMSW50QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xUZXh0
dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oIgorI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisjaWYgZGVmaW5lZCAoUVRfT1BFTkdMX0VTXzIpICYmICFkZWZpbmVkKEdMY2hh
cikKK3R5cGVkZWYgY2hhciBHTGNoYXI7CisjZW5kaWYKKworI2lmbmRlZiBBUElFTlRSWQorI2Rl
ZmluZSBBUElFTlRSWQorI2VuZGlmCisKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQWN0aXZl
VGV4dHVyZVR5cGUpIChHTGVudW0pOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xBdHRhY2hT
aGFkZXJUeXBlKSAoR0x1aW50LCBHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xC
aW5kQXR0cmliTG9jYXRpb25UeXBlKSAoR0x1aW50LCBHTHVpbnQsIGNvbnN0IGNoYXIgKik7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJpbmRCdWZmZXJUeXBlKSAoR0xlbnVtLCBHTHVpbnQp
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCaW5kRnJhbWVidWZmZXJUeXBlKSAoR0xlbnVt
IHRhcmdldCwgR0x1aW50IGZyYW1lYnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGds
QmluZFJlbmRlcmJ1ZmZlclR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVy
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQmxlbmRDb2xvclR5cGUpIChHTGNsYW1wZiwg
R0xjbGFtcGYsIEdMY2xhbXBmLCBHTGNsYW1wZik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bEJsZW5kRXF1YXRpb25TZXBhcmF0ZVR5cGUpKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFs
cGhhKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQmxlbmRGdW5jU2VwYXJhdGVUeXBlKShH
TGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RB
bHBoYSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJ1ZmZlckRhdGFUeXBlKSAoR0xlbnVt
LCBHTHNpemVpcHRyLCBjb25zdCBHTHZvaWQgKiwgR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsQnVmZmVyU3ViRGF0YVR5cGUpIChHTGVudW0sIEdMaW50cHRyLCBHTHNpemVpcHRy
LCBjb25zdCBHTHZvaWQgKik7Cit0eXBlZGVmIEdMZW51bSAoQVBJRU5UUlkqIGdsQ2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1c1R5cGUpIChHTGVudW0gdGFyZ2V0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkqIGdsQ29tcGlsZVNoYWRlclR5cGUpIChHTHVpbnQpOwordHlwZWRlZiBHTHVpbnQgKEFQSUVO
VFJZKiBnbENyZWF0ZVByb2dyYW1UeXBlKSAoKTsKK3R5cGVkZWYgR0x1aW50IChBUElFTlRSWSog
Z2xDcmVhdGVTaGFkZXJUeXBlKSAoR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGds
RGVsZXRlQnVmZmVyc1R5cGUpIChHTHNpemVpLCBjb25zdCBHTHVpbnQgKik7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZKiBnbERlbGV0ZUZyYW1lYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIGNvbnN0
IEdMdWludCAqZnJhbWVidWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsRGVsZXRl
UHJvZ3JhbVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xEZWxldGVS
ZW5kZXJidWZmZXJzVHlwZSkgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICpyZW5kZXJidWZmZXJz
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsRGVsZXRlU2hhZGVyVHlwZSkgKEdMdWludCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERldGFjaFNoYWRlclR5cGUpIChHTHVpbnQsIEdM
dWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlclR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVu
dCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEVHlwZSkgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVy
ZSwgR0xpbnQgbGV2ZWwpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZW5CdWZmZXJzVHlw
ZSkgKEdMc2l6ZWksIEdMdWludCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2VuZXJh
dGVNaXBtYXBUeXBlKSAoR0xlbnVtIHRhcmdldCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bEdlbkZyYW1lYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIEdMdWludCAqZnJhbWVidWZmZXJzKTsK
K3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2VuUmVuZGVyYnVmZmVyc1R5cGUpIChHTHNpemVp
IG4sIEdMdWludCAqcmVuZGVyYnVmZmVycyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdl
dEFjdGl2ZUF0dHJpYlR5cGUpIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKiBsZW5ndGgsIEdMaW50ICogc2l6ZSwgR0xlbnVtICogdHlwZSwg
R0xjaGFyICogbmFtZSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldEFjdGl2ZVVuaWZv
cm1UeXBlKSAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICogbGVuZ3RoLCBHTGludCAqIHNpemUsIEdMZW51bSAqIHR5cGUsIEdMY2hhciAqIG5h
bWUpOwordHlwZWRlZiBHTGludCAoQVBJRU5UUlkqIGdsR2V0QXR0cmliTG9jYXRpb25UeXBlKSAo
R0x1aW50LCBjb25zdCBjaGFyICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRCdWZm
ZXJQYXJhbWV0ZXJpdlR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xpbnQgKik7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZKiBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2VHlwZSkg
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUsIEdMaW50ICpw
YXJhbXMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRQcm9ncmFtSW5mb0xvZ1R5cGUp
IChHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkgKiwgY2hhciAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsR2V0UHJvZ3JhbWl2VHlwZSkgKEdMdWludCwgR0xlbnVtLCBHTGludCAqKTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZUeXBlKSAo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkqIGdsR2V0U2hhZGVySW5mb0xvZ1R5cGUpIChHTHVpbnQsIEdMc2l6ZWksIEdM
c2l6ZWkgKiwgY2hhciAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0U2hhZGVyaXZU
eXBlKSAoR0x1aW50LCBHTGVudW0sIEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xHZXRTaGFkZXJTb3VyY2VUeXBlKSAoR0x1aW50LCBHTHNpemVpLCBHTHNpemVpICosIGNoYXIg
Kik7Cit0eXBlZGVmIEdMaW50IChBUElFTlRSWSogZ2xHZXRVbmlmb3JtTG9jYXRpb25UeXBlKSAo
R0x1aW50LCBjb25zdCBjaGFyKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldFVuaWZv
cm1mdlR5cGUpIChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgKiBwYXJh
bXMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRVbmlmb3JtaXZUeXBlKSAoR0x1aW50
IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCAqIHBhcmFtcyk7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZKiBnbEdldFZlcnRleEF0dHJpYmZ2VHlwZSkgKEdMdWludCBpbmRleCwgR0xlbnVt
IHBuYW1lLCBHTGZsb2F0ICogcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0
VmVydGV4QXR0cmliaXZUeXBlKSAoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50ICog
cGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0VmVydGV4QXR0cmliUG9pbnRl
cnZUeXBlKSAoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMdm9pZCAqKiBwb2ludGVyKTsK
K3R5cGVkZWYgR0xib29sZWFuIChBUElFTlRSWSogZ2xJc0J1ZmZlclR5cGUpIChHTHVpbnQgYnVm
ZmVyKTsKK3R5cGVkZWYgR0xib29sZWFuIChBUElFTlRSWSogZ2xJc0ZyYW1lYnVmZmVyVHlwZSkg
KEdMdWludCBmcmFtZWJ1ZmZlcik7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkqIGdsSXNQ
cm9ncmFtVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkqIGdsSXNS
ZW5kZXJidWZmZXJUeXBlKSAoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Cit0eXBlZGVmIEdMYm9vbGVh
biAoQVBJRU5UUlkqIGdsSXNTaGFkZXJUeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsTGlua1Byb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkqIGdsUmVuZGVyYnVmZmVyU3RvcmFnZVR5cGUpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkqIGdsU2hhZGVyU291cmNlVHlwZSkgKEdMdWludCwgR0xzaXplaSwgY29uc3Qg
Y2hhciAqKiwgY29uc3QgR0xpbnQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFN0ZW5j
aWxGdW5jU2VwYXJhdGVUeXBlKSAoR0xlbnVtIGZhY2UsIEdMZW51bSBmdW5jLCBHTGludCByZWYs
IEdMdWludCBtYXNrKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsU3RlbmNpbE1hc2tTZXBh
cmF0ZVR5cGUpIChHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSogZ2xTdGVuY2lsT3BTZXBhcmF0ZVR5cGUpIChHTGVudW0gZmFjZSwgR0xlbnVtIHNmYWls
LCBHTGVudW0gZHBmYWlsLCBHTGVudW0gZHBwYXNzKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkq
IGdsVW5pZm9ybTFmVHlwZSkgKEdMaW50LCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkqIGdsVW5pZm9ybTFmdlR5cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xmbG9hdCAqKTsK
K3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTFpVHlwZSkgKEdMaW50LCBHTGludCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0xaXZUeXBlKSAoR0xpbnQsIEdMc2l6
ZWksIGNvbnN0IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMmZU
eXBlKSAoR0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xVbmlmb3JtMmZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0ICopOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMmlUeXBlKSAoR0xpbnQsIEdMaW50LCBHTGlu
dCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0yaXZUeXBlKSAoR0xpbnQsIEdM
c2l6ZWksIGNvbnN0IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3Jt
M2ZUeXBlKSAoR0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSogZ2xVbmlmb3JtM2Z2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZs
b2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtM2lUeXBlKSAoR0xpbnQs
IEdMaW50LCBHTGludCwgR0xpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3Jt
M2l2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGludCAqKTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkqIGdsVW5pZm9ybTRmVHlwZSkgKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZs
b2F0LCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTRmdlR5cGUp
IChHTGludCwgR0xzaXplaSwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkqIGdsVW5pZm9ybTRpVHlwZSkgKEdMaW50LCBHTGludCwgR0xpbnQsIEdMaW50LCBHTGludCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm00aXZUeXBlKSAoR0xpbnQsIEdMc2l6
ZWksIGNvbnN0IEdMaW50ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtTWF0
cml4MmZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQgKik7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm1NYXRyaXgzZnZUeXBlKSAoR0xpbnQs
IEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCAqKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsVW5pZm9ybU1hdHJpeDRmdlR5cGUpIChHTGludCwgR0xzaXplaSwgR0xib29sZWFu
LCBjb25zdCBHTGZsb2F0ICopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVc2VQcm9ncmFt
VHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZhbGlkYXRlUHJvZ3Jh
bVR5cGUpIChHTHVpbnQgcHJvZ3JhbSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRl
eEF0dHJpYjFmVHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZKiBnbFZlcnRleEF0dHJpYjFmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQgKik7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjJmVHlwZSkgKEdMdWludCwg
Y29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bFZlcnRleEF0dHJpYjJmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjNmVHlwZSkgKEdMdWludCwgY29uc3QgR0xm
bG9hdCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZKiBnbFZlcnRleEF0dHJpYjNmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQgKik7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjRmVHlwZSkgKEdMdWludCwgY29u
c3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjRmdlR5cGUpIChHTHVpbnQs
IGNvbnN0IEdMZmxvYXQgKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJp
YlBvaW50ZXJUeXBlKSAoR0x1aW50LCBHTGludCwgR0xlbnVtLCBHTGJvb2xlYW4sIEdMc2l6ZWks
IGNvbnN0IEdMdm9pZCAqKTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCB7Citw
dWJsaWM6CisKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOwor
CisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gbV92YWxpZDsgfQorCitwdWJsaWM6CisKKyAg
ICBnbEFjdGl2ZVRleHR1cmVUeXBlIGFjdGl2ZVRleHR1cmU7CisgICAgZ2xBdHRhY2hTaGFkZXJU
eXBlIGF0dGFjaFNoYWRlcjsKKyAgICBnbEJpbmRBdHRyaWJMb2NhdGlvblR5cGUgYmluZEF0dHJp
YkxvY2F0aW9uOworICAgIGdsQmluZEJ1ZmZlclR5cGUgYmluZEJ1ZmZlcjsKKyAgICBnbEJpbmRG
cmFtZWJ1ZmZlclR5cGUgYmluZEZyYW1lYnVmZmVyOworICAgIGdsQmluZFJlbmRlcmJ1ZmZlclR5
cGUgYmluZFJlbmRlcmJ1ZmZlcjsKKyAgICBnbEJsZW5kQ29sb3JUeXBlIGJsZW5kQ29sb3I7Cisg
ICAgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVUeXBlIGJsZW5kRXF1YXRpb25TZXBhcmF0ZTsKKyAg
ICBnbEJsZW5kRnVuY1NlcGFyYXRlVHlwZSBibGVuZEZ1bmNTZXBhcmF0ZTsKKyAgICBnbEJ1ZmZl
ckRhdGFUeXBlIGJ1ZmZlckRhdGE7CisgICAgZ2xCdWZmZXJTdWJEYXRhVHlwZSBidWZmZXJTdWJE
YXRhOworICAgIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c1R5cGUgY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1czsKKyAgICBnbENvbXBpbGVTaGFkZXJUeXBlIGNvbXBpbGVTaGFkZXI7CisgICAgZ2xDcmVh
dGVQcm9ncmFtVHlwZSBjcmVhdGVQcm9ncmFtOworICAgIGdsQ3JlYXRlU2hhZGVyVHlwZSBjcmVh
dGVTaGFkZXI7CisgICAgZ2xEZWxldGVCdWZmZXJzVHlwZSBkZWxldGVCdWZmZXJzOworICAgIGds
RGVsZXRlRnJhbWVidWZmZXJzVHlwZSBkZWxldGVGcmFtZWJ1ZmZlcnM7CisgICAgZ2xEZWxldGVQ
cm9ncmFtVHlwZSBkZWxldGVQcm9ncmFtOworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc1R5cGUg
ZGVsZXRlUmVuZGVyYnVmZmVyczsKKyAgICBnbERlbGV0ZVNoYWRlclR5cGUgZGVsZXRlU2hhZGVy
OworICAgIGdsRGV0YWNoU2hhZGVyVHlwZSBkZXRhY2hTaGFkZXI7CisgICAgZ2xEaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXlUeXBlIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBnbEVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5VHlwZSBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlwZSBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcjsKKyAgICBn
bEZyYW1lYnVmZmVyVGV4dHVyZTJEVHlwZSBmcmFtZWJ1ZmZlclRleHR1cmUyRDsKKyAgICBnbEdl
bkJ1ZmZlcnNUeXBlIGdlbkJ1ZmZlcnM7CisgICAgZ2xHZW5lcmF0ZU1pcG1hcFR5cGUgZ2VuZXJh
dGVNaXBtYXA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNUeXBlIGdlbkZyYW1lYnVmZmVyczsKKyAg
ICBnbEdlblJlbmRlcmJ1ZmZlcnNUeXBlIGdlblJlbmRlcmJ1ZmZlcnM7CisgICAgZ2xHZXRBY3Rp
dmVBdHRyaWJUeXBlIGdldEFjdGl2ZUF0dHJpYjsKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1UeXBl
IGdldEFjdGl2ZVVuaWZvcm07CisgICAgZ2xHZXRBdHRyaWJMb2NhdGlvblR5cGUgZ2V0QXR0cmli
TG9jYXRpb247CisgICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdlR5cGUgZ2V0QnVmZmVyUGFyYW1l
dGVyaXY7CisgICAgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdlR5cGUgZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXY7CisgICAgZ2xHZXRQcm9ncmFtSW5mb0xv
Z1R5cGUgZ2V0UHJvZ3JhbUluZm9Mb2c7CisgICAgZ2xHZXRQcm9ncmFtaXZUeXBlIGdldFByb2dy
YW1pdjsKKyAgICBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2VHlwZSBnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdjsKKyAgICBnbEdldFNoYWRlckluZm9Mb2dUeXBlIGdldFNoYWRlckluZm9M
b2c7CisgICAgZ2xHZXRTaGFkZXJpdlR5cGUgZ2V0U2hhZGVyaXY7CisgICAgZ2xHZXRTaGFkZXJT
b3VyY2VUeXBlIGdldFNoYWRlclNvdXJjZTsKKyAgICBnbEdldFVuaWZvcm1mdlR5cGUgZ2V0VW5p
Zm9ybWZ2OworICAgIGdsR2V0VW5pZm9ybWl2VHlwZSBnZXRVbmlmb3JtaXY7CisgICAgZ2xHZXRV
bmlmb3JtTG9jYXRpb25UeXBlIGdldFVuaWZvcm1Mb2NhdGlvbjsKKyAgICBnbEdldFZlcnRleEF0
dHJpYmZ2VHlwZSBnZXRWZXJ0ZXhBdHRyaWJmdjsKKyAgICBnbEdldFZlcnRleEF0dHJpYml2VHlw
ZSBnZXRWZXJ0ZXhBdHRyaWJpdjsKKyAgICBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2VHlwZSBn
ZXRWZXJ0ZXhBdHRyaWJQb2ludGVydjsKKyAgICBnbElzQnVmZmVyVHlwZSBpc0J1ZmZlcjsKKyAg
ICBnbElzRnJhbWVidWZmZXJUeXBlIGlzRnJhbWVidWZmZXI7CisgICAgZ2xJc1Byb2dyYW1UeXBl
IGlzUHJvZ3JhbTsKKyAgICBnbElzUmVuZGVyYnVmZmVyVHlwZSBpc1JlbmRlcmJ1ZmZlcjsKKyAg
ICBnbElzU2hhZGVyVHlwZSBpc1NoYWRlcjsKKyAgICBnbExpbmtQcm9ncmFtVHlwZSBsaW5rUHJv
Z3JhbTsKKyAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VUeXBlIHJlbmRlcmJ1ZmZlclN0b3JhZ2U7
CisgICAgZ2xTaGFkZXJTb3VyY2VUeXBlIHNoYWRlclNvdXJjZTsKKyAgICBnbFN0ZW5jaWxGdW5j
U2VwYXJhdGVUeXBlIHN0ZW5jaWxGdW5jU2VwYXJhdGU7CisgICAgZ2xTdGVuY2lsTWFza1NlcGFy
YXRlVHlwZSBzdGVuY2lsTWFza1NlcGFyYXRlOworICAgIGdsU3RlbmNpbE9wU2VwYXJhdGVUeXBl
IHN0ZW5jaWxPcFNlcGFyYXRlOworICAgIGdsVW5pZm9ybTFmVHlwZSB1bmlmb3JtMWY7CisgICAg
Z2xVbmlmb3JtMWZ2VHlwZSB1bmlmb3JtMWZ2OworICAgIGdsVW5pZm9ybTFpVHlwZSB1bmlmb3Jt
MWk7CisgICAgZ2xVbmlmb3JtMWl2VHlwZSB1bmlmb3JtMWl2OworICAgIGdsVW5pZm9ybTJmVHlw
ZSB1bmlmb3JtMmY7CisgICAgZ2xVbmlmb3JtMmZ2VHlwZSB1bmlmb3JtMmZ2OworICAgIGdsVW5p
Zm9ybTJpVHlwZSB1bmlmb3JtMmk7CisgICAgZ2xVbmlmb3JtMml2VHlwZSB1bmlmb3JtMml2Owor
ICAgIGdsVW5pZm9ybTNmVHlwZSB1bmlmb3JtM2Y7CisgICAgZ2xVbmlmb3JtM2Z2VHlwZSB1bmlm
b3JtM2Z2OworICAgIGdsVW5pZm9ybTNpVHlwZSB1bmlmb3JtM2k7CisgICAgZ2xVbmlmb3JtM2l2
VHlwZSB1bmlmb3JtM2l2OworICAgIGdsVW5pZm9ybTRmVHlwZSB1bmlmb3JtNGY7CisgICAgZ2xV
bmlmb3JtNGZ2VHlwZSB1bmlmb3JtNGZ2OworICAgIGdsVW5pZm9ybTRpVHlwZSB1bmlmb3JtNGk7
CisgICAgZ2xVbmlmb3JtNGl2VHlwZSB1bmlmb3JtNGl2OworICAgIGdsVW5pZm9ybU1hdHJpeDJm
dlR5cGUgdW5pZm9ybU1hdHJpeDJmdjsKKyAgICBnbFVuaWZvcm1NYXRyaXgzZnZUeXBlIHVuaWZv
cm1NYXRyaXgzZnY7CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2VHlwZSB1bmlmb3JtTWF0cml4NGZ2
OworICAgIGdsVXNlUHJvZ3JhbVR5cGUgdXNlUHJvZ3JhbTsKKyAgICBnbFZhbGlkYXRlUHJvZ3Jh
bVR5cGUgdmFsaWRhdGVQcm9ncmFtOworICAgIGdsVmVydGV4QXR0cmliMWZUeXBlIHZlcnRleEF0
dHJpYjFmOworICAgIGdsVmVydGV4QXR0cmliMWZ2VHlwZSB2ZXJ0ZXhBdHRyaWIxZnY7CisgICAg
Z2xWZXJ0ZXhBdHRyaWIyZlR5cGUgdmVydGV4QXR0cmliMmY7CisgICAgZ2xWZXJ0ZXhBdHRyaWIy
ZnZUeXBlIHZlcnRleEF0dHJpYjJmdjsKKyAgICBnbFZlcnRleEF0dHJpYjNmVHlwZSB2ZXJ0ZXhB
dHRyaWIzZjsKKyAgICBnbFZlcnRleEF0dHJpYjNmdlR5cGUgdmVydGV4QXR0cmliM2Z2OworICAg
IGdsVmVydGV4QXR0cmliNGZUeXBlIHZlcnRleEF0dHJpYjRmOworICAgIGdsVmVydGV4QXR0cmli
NGZ2VHlwZSB2ZXJ0ZXhBdHRyaWI0ZnY7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyVHlwZSB2
ZXJ0ZXhBdHRyaWJQb2ludGVyOworCitwdWJsaWM6CisKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBtX2F0dHJzOworICAgIFFHTFdpZGdldCogbV9nbFdpZGdldDsKKyAgICBHTHVp
bnQgbV90ZXh0dXJlOworICAgIEdMdWludCBtX21haW5GYm87CisgICAgR0x1aW50IG1fY3VycmVu
dEZibzsKKyAgICBHTHVpbnQgbV9kZXB0aEJ1ZmZlcjsKKyAgICBRSW1hZ2UgbV9waXhlbHM7Cisg
ICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz4gbV9zeW50aGV0aWNFcnJvcnM7CisKK3ByaXZh
dGU6CisKKyAgICB2b2lkKiBnZXRQcm9jQWRkcmVzcyhjb25zdCBRR0xDb250ZXh0KiBjdHgsIGNv
bnN0IFFTdHJpbmcmIHByb2MpOworCitwcml2YXRlOgorCisgICAgYm9vbCBtX3ZhbGlkOworfTsK
KworR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKKyAgICA6IG1fYXR0cnMoYXR0cnMp
CisgICAgLCBtX2dsV2lkZ2V0KDApCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1fbWFpbkZi
bygwKQorICAgICwgbV9jdXJyZW50RmJvKDApCisgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAg
LCBtX3ZhbGlkKHRydWUpCit7CisgICAgbV9hdHRycy5hbHBoYSA9IHRydWU7CisgICAgbV9hdHRy
cy5kZXB0aCA9IHRydWU7CisgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgbV9hdHRy
cy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICBtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRy
dWU7CisKKyAgICBRR0xGb3JtYXQgZm9ybWF0OworCisgICAgZm9ybWF0LnNldERlcHRoKHRydWUp
OworICAgIGZvcm1hdC5zZXRTYW1wbGVCdWZmZXJzKHRydWUpOworICAgIGZvcm1hdC5zZXRTdGVu
Y2lsKGZhbHNlKTsKKworICAgIG1fZ2xXaWRnZXQgPSBuZXcgUUdMV2lkZ2V0KGZvcm1hdCk7Cisg
ICAgaWYgKCFtX2dsV2lkZ2V0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgcVdhcm5pbmcoIkdyYXBo
aWNzQ29udGV4dDNEOiBRR0xXaWRnZXQgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGNvbnRleHQiKTsK
KyAgICAgICAgbV92YWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIGNvbnN0IFFHTENvbnRleHQqIGN0eCA9
IG1fZ2xXaWRnZXQtPmNvbnRleHQoKTsKKworI2lmICFkZWZpbmVkIChRVF9PUEVOR0xfRVNfMikg
CisgICAgYWN0aXZlVGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xBY3RpdmVUZXh0dXJlVHlw
ZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xBY3RpdmVUZXh0dXJlIikpOworICAgIGF0dGFjaFNo
YWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xBdHRhY2hTaGFkZXJUeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbEF0dGFjaFNoYWRlciIpKTsKKyAgICBiaW5kQXR0cmliTG9jYXRpb24gPSByZWlu
dGVycHJldF9jYXN0PGdsQmluZEF0dHJpYkxvY2F0aW9uVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xCaW5kQXR0cmliTG9jYXRpb24iKSk7CisgICAgYmluZEJ1ZmZlciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xCaW5kQnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCaW5kQnVmZmVy
IikpOworICAgIGJpbmRGcmFtZWJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCaW5kRnJhbWVi
dWZmZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJpbmRGcmFtZWJ1ZmZlciIpKTsKKyAg
ICBiaW5kUmVuZGVyYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbEJpbmRSZW5kZXJidWZmZXJU
eXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEJpbmRSZW5kZXJidWZmZXIiKSk7CisgICAgYmxl
bmRDb2xvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCbGVuZENvbG9yVHlwZT4oZ2V0UHJvY0FkZHJl
c3MoY3R4LCAiZ2xCbGVuZENvbG9yIikpOworICAgIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVUeXBlPihnZXRQcm9jQWRkcmVz
cyhjdHgsICJnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZSIpKTsKKyAgICBibGVuZEZ1bmNTZXBhcmF0
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xCbGVuZEZ1bmNTZXBhcmF0ZVR5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsQmxlbmRGdW5jU2VwYXJhdGUiKSk7CisgICAgYnVmZmVyRGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Z2xCdWZmZXJEYXRhVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xCdWZm
ZXJEYXRhIikpOworICAgIGJ1ZmZlclN1YkRhdGEgPSByZWludGVycHJldF9jYXN0PGdsQnVmZmVy
U3ViRGF0YVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsQnVmZmVyU3ViRGF0YSIpKTsKKyAg
ICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzID0gcmVpbnRlcnByZXRfY2FzdDxnbENoZWNrRnJhbWVi
dWZmZXJTdGF0dXNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbENoZWNrRnJhbWVidWZmZXJT
dGF0dXMiKSk7CisgICAgY29tcGlsZVNoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xDb21waWxl
U2hhZGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xDb21waWxlU2hhZGVyIikpOworICAg
IGNyZWF0ZVByb2dyYW0gPSByZWludGVycHJldF9jYXN0PGdsQ3JlYXRlUHJvZ3JhbVR5cGU+KGdl
dFByb2NBZGRyZXNzKGN0eCwgImdsQ3JlYXRlUHJvZ3JhbSIpKTsKKyAgICBjcmVhdGVTaGFkZXIg
PSByZWludGVycHJldF9jYXN0PGdsQ3JlYXRlU2hhZGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xDcmVhdGVTaGFkZXIiKSk7CisgICAgZGVsZXRlQnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Z2xEZWxldGVCdWZmZXJzVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xEZWxldGVCdWZm
ZXJzIikpOworICAgIGRlbGV0ZUZyYW1lYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxl
dGVGcmFtZWJ1ZmZlcnNUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERlbGV0ZUZyYW1lYnVm
ZmVycyIpKTsKKyAgICBkZWxldGVQcm9ncmFtID0gcmVpbnRlcnByZXRfY2FzdDxnbERlbGV0ZVBy
b2dyYW1UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbERlbGV0ZVByb2dyYW0iKSk7CisgICAg
ZGVsZXRlUmVuZGVyYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxldGVSZW5kZXJidWZm
ZXJzVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xEZWxldGVSZW5kZXJidWZmZXJzIikpOwor
ICAgIGRlbGV0ZVNoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xEZWxldGVTaGFkZXJUeXBlPihn
ZXRQcm9jQWRkcmVzcyhjdHgsICJnbERlbGV0ZVNoYWRlciIpKTsKKyAgICBkZXRhY2hTaGFkZXIg
PSByZWludGVycHJldF9jYXN0PGdsRGV0YWNoU2hhZGVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xEZXRhY2hTaGFkZXIiKSk7CisgICAgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ID0gcmVp
bnRlcnByZXRfY2FzdDxnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5IikpOworICAgIGVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIpKTsK
KyAgICBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlclR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIiKSk7CisgICAgZnJhbWVidWZmZXJUZXh0dXJlMkQgPSByZWludGVycHJldF9j
YXN0PGdsRnJhbWVidWZmZXJUZXh0dXJlMkRUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEZy
YW1lYnVmZmVyVGV4dHVyZTJEIikpOworICAgIGdlbkJ1ZmZlcnMgPSByZWludGVycHJldF9jYXN0
PGdsR2VuQnVmZmVyc1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2VuQnVmZmVycyIpKTsK
KyAgICBnZW5lcmF0ZU1pcG1hcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZW5lcmF0ZU1pcG1hcFR5
cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2VuZXJhdGVNaXBtYXAiKSk7CisgICAgZ2VuRnJh
bWVidWZmZXJzID0gcmVpbnRlcnByZXRfY2FzdDxnbEdlbkZyYW1lYnVmZmVyc1R5cGU+KGdldFBy
b2NBZGRyZXNzKGN0eCwgImdsR2VuRnJhbWVidWZmZXJzIikpOworICAgIGdlblJlbmRlcmJ1ZmZl
cnMgPSByZWludGVycHJldF9jYXN0PGdsR2VuUmVuZGVyYnVmZmVyc1R5cGU+KGdldFByb2NBZGRy
ZXNzKGN0eCwgImdsR2VuUmVuZGVyYnVmZmVycyIpKTsKKyAgICBnZXRBY3RpdmVBdHRyaWIgPSBy
ZWludGVycHJldF9jYXN0PGdsR2V0QWN0aXZlQXR0cmliVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xHZXRBY3RpdmVBdHRyaWIiKSk7CisgICAgZ2V0QWN0aXZlVW5pZm9ybSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Z2xHZXRBY3RpdmVVbmlmb3JtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xH
ZXRBY3RpdmVVbmlmb3JtIikpOworICAgIGdldEF0dHJpYkxvY2F0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDxnbEdldEF0dHJpYkxvY2F0aW9uVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRB
dHRyaWJMb2NhdGlvbiIpKTsKKyAgICBnZXRCdWZmZXJQYXJhbWV0ZXJpdiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
R2V0QnVmZmVyUGFyYW1ldGVyaXYiKSk7CisgICAgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYgPSByZWludGVycHJldF9jYXN0PGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2IikpOworICAgIGdldFByb2dyYW1JbmZvTG9nID0gcmVpbnRlcnByZXRf
Y2FzdDxnbEdldFByb2dyYW1JbmZvTG9nVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRQ
cm9ncmFtSW5mb0xvZyIpKTsKKyAgICBnZXRQcm9ncmFtaXYgPSByZWludGVycHJldF9jYXN0PGds
R2V0UHJvZ3JhbWl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRQcm9ncmFtaXYiKSk7
CisgICAgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYgPSByZWludGVycHJldF9jYXN0PGdsR2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbEdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2IikpOworICAgIGdldFNoYWRlckluZm9Mb2cgPSByZWludGVy
cHJldF9jYXN0PGdsR2V0U2hhZGVySW5mb0xvZ1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
R2V0U2hhZGVySW5mb0xvZyIpKTsKKyAgICBnZXRTaGFkZXJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Z2xHZXRTaGFkZXJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0U2hhZGVyaXYiKSk7
CisgICAgZ2V0U2hhZGVyU291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxnbEdldFNoYWRlclNvdXJj
ZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0U2hhZGVyU291cmNlIikpOworICAgIGdl
dFVuaWZvcm1mdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRVbmlmb3JtZnZUeXBlPihnZXRQcm9j
QWRkcmVzcyhjdHgsICJnbEdldFVuaWZvcm1mdiIpKTsKKyAgICBnZXRVbmlmb3JtaXYgPSByZWlu
dGVycHJldF9jYXN0PGdsR2V0VW5pZm9ybWl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xH
ZXRVbmlmb3JtaXYiKSk7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2Fz
dDxnbEdldFVuaWZvcm1Mb2NhdGlvblR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0VW5p
Zm9ybUxvY2F0aW9uIikpOworICAgIGdldFZlcnRleEF0dHJpYmZ2ID0gcmVpbnRlcnByZXRfY2Fz
dDxnbEdldFZlcnRleEF0dHJpYmZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xHZXRWZXJ0
ZXhBdHRyaWJmdiIpKTsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Z2xHZXRWZXJ0ZXhBdHRyaWJpdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsR2V0VmVydGV4
QXR0cmliaXYiKSk7CisgICAgZ2V0VmVydGV4QXR0cmliUG9pbnRlcnYgPSByZWludGVycHJldF9j
YXN0PGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJn
bEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2IikpOworICAgIGlzQnVmZmVyID0gcmVpbnRlcnByZXRf
Y2FzdDxnbElzQnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xJc0J1ZmZlciIpKTsK
KyAgICBpc0ZyYW1lYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxnbElzRnJhbWVidWZmZXJUeXBl
PihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbElzRnJhbWVidWZmZXIiKSk7CisgICAgaXNQcm9ncmFt
ID0gcmVpbnRlcnByZXRfY2FzdDxnbElzUHJvZ3JhbVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwg
ImdsSXNQcm9ncmFtIikpOworICAgIGlzUmVuZGVyYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxn
bElzUmVuZGVyYnVmZmVyVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xJc1JlbmRlcmJ1ZmZl
ciIpKTsKKyAgICBpc1NoYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xJc1NoYWRlclR5cGU+KGdl
dFByb2NBZGRyZXNzKGN0eCwgImdsSXNTaGFkZXIiKSk7CisgICAgbGlua1Byb2dyYW0gPSByZWlu
dGVycHJldF9jYXN0PGdsTGlua1Byb2dyYW1UeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbExp
bmtQcm9ncmFtIikpOworICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0
PGdsUmVuZGVyYnVmZmVyU3RvcmFnZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsUmVuZGVy
YnVmZmVyU3RvcmFnZSIpKTsKKyAgICBzaGFkZXJTb3VyY2UgPSByZWludGVycHJldF9jYXN0PGds
U2hhZGVyU291cmNlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xTaGFkZXJTb3VyY2UiKSk7
CisgICAgc3RlbmNpbEZ1bmNTZXBhcmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xTdGVuY2lsRnVu
Y1NlcGFyYXRlVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xTdGVuY2lsRnVuY1NlcGFyYXRl
IikpOworICAgIHN0ZW5jaWxNYXNrU2VwYXJhdGUgPSByZWludGVycHJldF9jYXN0PGdsU3RlbmNp
bE1hc2tTZXBhcmF0ZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsU3RlbmNpbE1hc2tTZXBh
cmF0ZSIpKTsKKyAgICBzdGVuY2lsT3BTZXBhcmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xTdGVu
Y2lsT3BTZXBhcmF0ZVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsU3RlbmNpbE9wU2VwYXJh
dGUiKSk7CisgICAgdW5pZm9ybTFmID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0xZlR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTFmIikpOworICAgIHVuaWZvcm0xZnYgPSBy
ZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTFmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImds
VW5pZm9ybTFmdiIpKTsKKyAgICB1bmlmb3JtMWkgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9y
bTFpVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtMWkiKSk7CisgICAgdW5pZm9y
bTFpdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtMWl2VHlwZT4oZ2V0UHJvY0FkZHJlc3Mo
Y3R4LCAiZ2xVbmlmb3JtMWl2IikpOworICAgIHVuaWZvcm0yZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Z2xVbmlmb3JtMmZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0yZiIpKTsKKyAg
ICB1bmlmb3JtMmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm0yZnZUeXBlPihnZXRQcm9j
QWRkcmVzcyhjdHgsICJnbFVuaWZvcm0yZnYiKSk7CisgICAgdW5pZm9ybTJpID0gcmVpbnRlcnBy
ZXRfY2FzdDxnbFVuaWZvcm0yaVR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTJp
IikpOworICAgIHVuaWZvcm0yaXYgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTJpdlR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTJpdiIpKTsKKyAgICB1bmlmb3JtM2YgPSBy
ZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTNmVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xV
bmlmb3JtM2YiKSk7CisgICAgdW5pZm9ybTNmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3Jt
M2Z2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtM2Z2IikpOworICAgIHVuaWZv
cm0zaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtM2lUeXBlPihnZXRQcm9jQWRkcmVzcyhj
dHgsICJnbFVuaWZvcm0zaSIpKTsKKyAgICB1bmlmb3JtM2l2ID0gcmVpbnRlcnByZXRfY2FzdDxn
bFVuaWZvcm0zaXZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm0zaXYiKSk7Cisg
ICAgdW5pZm9ybTRmID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZvcm00ZlR5cGU+KGdldFByb2NB
ZGRyZXNzKGN0eCwgImdsVW5pZm9ybTRmIikpOworICAgIHVuaWZvcm00ZnYgPSByZWludGVycHJl
dF9jYXN0PGdsVW5pZm9ybTRmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybTRm
diIpKTsKKyAgICB1bmlmb3JtNGkgPSByZWludGVycHJldF9jYXN0PGdsVW5pZm9ybTRpVHlwZT4o
Z2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtNGkiKSk7CisgICAgdW5pZm9ybTRpdiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtNGl2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xV
bmlmb3JtNGl2IikpOworICAgIHVuaWZvcm1NYXRyaXgyZnYgPSByZWludGVycHJldF9jYXN0PGds
VW5pZm9ybU1hdHJpeDJmdlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVW5pZm9ybU1hdHJp
eDJmdiIpKTsKKyAgICB1bmlmb3JtTWF0cml4M2Z2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFVuaWZv
cm1NYXRyaXgzZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFVuaWZvcm1NYXRyaXgzZnYi
KSk7CisgICAgdW5pZm9ybU1hdHJpeDRmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xVbmlmb3JtTWF0
cml4NGZ2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4LCAiZ2xVbmlmb3JtTWF0cml4NGZ2IikpOwor
ICAgIHVzZVByb2dyYW0gPSByZWludGVycHJldF9jYXN0PGdsVXNlUHJvZ3JhbVR5cGU+KGdldFBy
b2NBZGRyZXNzKGN0eCwgImdsVXNlUHJvZ3JhbSIpKTsKKyAgICB2YWxpZGF0ZVByb2dyYW0gPSBy
ZWludGVycHJldF9jYXN0PGdsVmFsaWRhdGVQcm9ncmFtVHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xWYWxpZGF0ZVByb2dyYW0iKSk7CisgICAgdmVydGV4QXR0cmliMWYgPSByZWludGVycHJl
dF9jYXN0PGdsVmVydGV4QXR0cmliMWZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRl
eEF0dHJpYjFmIikpOworICAgIHZlcnRleEF0dHJpYjFmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xW
ZXJ0ZXhBdHRyaWIxZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjFm
diIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWIyZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xWZXJ0ZXhBdHRy
aWIyZlR5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVmVydGV4QXR0cmliMmYiKSk7CisgICAg
dmVydGV4QXR0cmliMmZ2ID0gcmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjJmdlR5cGU+
KGdldFByb2NBZGRyZXNzKGN0eCwgImdsVmVydGV4QXR0cmliMmZ2IikpOworICAgIHZlcnRleEF0
dHJpYjNmID0gcmVpbnRlcnByZXRfY2FzdDxnbFZlcnRleEF0dHJpYjNmVHlwZT4oZ2V0UHJvY0Fk
ZHJlc3MoY3R4LCAiZ2xWZXJ0ZXhBdHRyaWIzZiIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWIzZnYgPSBy
ZWludGVycHJldF9jYXN0PGdsVmVydGV4QXR0cmliM2Z2VHlwZT4oZ2V0UHJvY0FkZHJlc3MoY3R4
LCAiZ2xWZXJ0ZXhBdHRyaWIzZnYiKSk7CisgICAgdmVydGV4QXR0cmliNGYgPSByZWludGVycHJl
dF9jYXN0PGdsVmVydGV4QXR0cmliNGZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRl
eEF0dHJpYjRmIikpOworICAgIHZlcnRleEF0dHJpYjRmdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xW
ZXJ0ZXhBdHRyaWI0ZnZUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYjRm
diIpKTsKKyAgICB2ZXJ0ZXhBdHRyaWJQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDxnbFZlcnRl
eEF0dHJpYlBvaW50ZXJUeXBlPihnZXRQcm9jQWRkcmVzcyhjdHgsICJnbFZlcnRleEF0dHJpYlBv
aW50ZXIiKSk7CisjZWxzZQorICAgIGFjdGl2ZVRleHR1cmUgPSBnbEFjdGl2ZVRleHR1cmU7Cisg
ICAgYXR0YWNoU2hhZGVyID0gZ2xBdHRhY2hTaGFkZXI7CisgICAgYmluZEF0dHJpYkxvY2F0aW9u
ID0gZ2xCaW5kQXR0cmliTG9jYXRpb247CisgICAgYmluZEJ1ZmZlciA9IGdsQmluZEJ1ZmZlcjsK
KyAgICBiaW5kRnJhbWVidWZmZXIgPSBnbEJpbmRGcmFtZWJ1ZmZlcjsKKyAgICBiaW5kUmVuZGVy
YnVmZmVyID0gZ2xCaW5kUmVuZGVyYnVmZmVyOworICAgIGJsZW5kQ29sb3IgPSBnbEJsZW5kQ29s
b3I7CisgICAgYmxlbmRFcXVhdGlvblNlcGFyYXRlID0gZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGU7
CisgICAgYmxlbmRGdW5jU2VwYXJhdGUgPSBnbEJsZW5kRnVuY1NlcGFyYXRlOworICAgIGJ1ZmZl
ckRhdGEgPSBnbEJ1ZmZlckRhdGE7CisgICAgYnVmZmVyU3ViRGF0YSA9IGdsQnVmZmVyU3ViRGF0
YTsKKyAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
OworICAgIGNvbXBpbGVTaGFkZXIgPSBnbENvbXBpbGVTaGFkZXI7CisgICAgY3JlYXRlUHJvZ3Jh
bSA9IGdsQ3JlYXRlUHJvZ3JhbTsKKyAgICBjcmVhdGVTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcjsK
KyAgICBkZWxldGVCdWZmZXJzID0gZ2xEZWxldGVCdWZmZXJzOworICAgIGRlbGV0ZUZyYW1lYnVm
ZmVycyA9IGdsRGVsZXRlRnJhbWVidWZmZXJzOworICAgIGRlbGV0ZVByb2dyYW0gPSBnbERlbGV0
ZVByb2dyYW07CisgICAgZGVsZXRlUmVuZGVyYnVmZmVycyA9IGdsRGVsZXRlUmVuZGVyYnVmZmVy
czsKKyAgICBkZWxldGVTaGFkZXIgPSBnbERlbGV0ZVNoYWRlcjsKKyAgICBkZXRhY2hTaGFkZXIg
PSBnbERldGFjaFNoYWRlcjsKKyAgICBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkgPSBnbERpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSA9IGdsRW5h
YmxlVmVydGV4QXR0cmliQXJyYXk7CisgICAgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIgPSBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyOworICAgIGZyYW1lYnVmZmVyVGV4dHVyZTJEID0gZ2xGcmFt
ZWJ1ZmZlclRleHR1cmUyRDsKKyAgICBnZW5CdWZmZXJzID0gZ2xHZW5CdWZmZXJzOworICAgIGdl
bmVyYXRlTWlwbWFwID0gZ2xHZW5lcmF0ZU1pcG1hcDsKKyAgICBnZW5GcmFtZWJ1ZmZlcnMgPSBn
bEdlbkZyYW1lYnVmZmVyczsKKyAgICBnZW5SZW5kZXJidWZmZXJzID0gZ2xHZW5SZW5kZXJidWZm
ZXJzOworICAgIGdldEFjdGl2ZUF0dHJpYiA9IGdsR2V0QWN0aXZlQXR0cmliOworICAgIGdldEFj
dGl2ZVVuaWZvcm0gPSBnbEdldEFjdGl2ZVVuaWZvcm07CisgICAgZ2V0QXR0cmliTG9jYXRpb24g
PSBnbEdldEF0dHJpYkxvY2F0aW9uOworICAgIGdldEJ1ZmZlclBhcmFtZXRlcml2ID0gZ2xHZXRC
dWZmZXJQYXJhbWV0ZXJpdjsKKyAgICBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
diA9IGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXY7CisgICAgZ2V0UHJvZ3Jh
bUluZm9Mb2cgPSBnbEdldFByb2dyYW1JbmZvTG9nOworICAgIGdldFByb2dyYW1pdiA9IGdsR2V0
UHJvZ3JhbWl2OworICAgIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2ID0gZ2xHZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpdjsKKyAgICBnZXRTaGFkZXJJbmZvTG9nID0gZ2xHZXRTaGFkZXJJbmZv
TG9nOworICAgIGdldFNoYWRlcml2ID0gZ2xHZXRTaGFkZXJpdjsKKyAgICBnZXRTaGFkZXJTb3Vy
Y2UgPSBnbEdldFNoYWRlclNvdXJjZTsKKyAgICBnZXRVbmlmb3JtZnYgPSBnbEdldFVuaWZvcm1m
djsKKyAgICBnZXRVbmlmb3JtaXYgPSBnbEdldFVuaWZvcm1pdjsKKyAgICBnZXRVbmlmb3JtTG9j
YXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbjsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJmdiA9IGds
R2V0VmVydGV4QXR0cmliZnY7CisgICAgZ2V0VmVydGV4QXR0cmliaXYgPSBnbEdldFZlcnRleEF0
dHJpYml2OworICAgIGdldFZlcnRleEF0dHJpYlBvaW50ZXJ2ID0gZ2xHZXRWZXJ0ZXhBdHRyaWJQ
b2ludGVydjsKKyAgICBpc0J1ZmZlciA9IGdsSXNCdWZmZXI7CisgICAgaXNGcmFtZWJ1ZmZlciA9
IGdsSXNGcmFtZWJ1ZmZlcjsKKyAgICBpc1Byb2dyYW0gPSBnbElzUHJvZ3JhbTsKKyAgICBpc1Jl
bmRlcmJ1ZmZlciA9IGdsSXNSZW5kZXJidWZmZXI7CisgICAgaXNTaGFkZXIgPSBnbElzU2hhZGVy
OworICAgIGxpbmtQcm9ncmFtID0gZ2xMaW5rUHJvZ3JhbTsKKyAgICByZW5kZXJidWZmZXJTdG9y
YWdlID0gZ2xSZW5kZXJidWZmZXJTdG9yYWdlOworICAgIHNoYWRlclNvdXJjZSA9IGdsU2hhZGVy
U291cmNlOworICAgIHN0ZW5jaWxGdW5jU2VwYXJhdGUgPSBnbFN0ZW5jaWxGdW5jU2VwYXJhdGU7
CisgICAgc3RlbmNpbE1hc2tTZXBhcmF0ZSA9IGdsU3RlbmNpbE1hc2tTZXBhcmF0ZTsKKyAgICBz
dGVuY2lsT3BTZXBhcmF0ZSA9IGdsU3RlbmNpbE9wU2VwYXJhdGU7CisgICAgdW5pZm9ybTFmID0g
Z2xVbmlmb3JtMWY7CisgICAgdW5pZm9ybTFmdiA9IGdsVW5pZm9ybTFmdjsKKyAgICB1bmlmb3Jt
MWkgPSBnbFVuaWZvcm0xaTsKKyAgICB1bmlmb3JtMWl2ID0gZ2xVbmlmb3JtMWl2OworICAgIHVu
aWZvcm0yZiA9IGdsVW5pZm9ybTJmOworICAgIHVuaWZvcm0yZnYgPSBnbFVuaWZvcm0yZnY7Cisg
ICAgdW5pZm9ybTJpID0gZ2xVbmlmb3JtMmk7CisgICAgdW5pZm9ybTJpdiA9IGdsVW5pZm9ybTJp
djsKKyAgICB1bmlmb3JtM2YgPSBnbFVuaWZvcm0zZjsKKyAgICB1bmlmb3JtM2Z2ID0gZ2xVbmlm
b3JtM2Z2OworICAgIHVuaWZvcm0zaSA9IGdsVW5pZm9ybTNpOworICAgIHVuaWZvcm0zaXYgPSBn
bFVuaWZvcm0zaXY7CisgICAgdW5pZm9ybTRmID0gZ2xVbmlmb3JtNGY7CisgICAgdW5pZm9ybTRm
diA9IGdsVW5pZm9ybTRmdjsKKyAgICB1bmlmb3JtNGkgPSBnbFVuaWZvcm00aTsKKyAgICB1bmlm
b3JtNGl2ID0gZ2xVbmlmb3JtNGl2OworICAgIHVuaWZvcm1NYXRyaXgyZnYgPSBnbFVuaWZvcm1N
YXRyaXgyZnY7CisgICAgdW5pZm9ybU1hdHJpeDNmdiA9IGdsVW5pZm9ybU1hdHJpeDNmdjsKKyAg
ICB1bmlmb3JtTWF0cml4NGZ2ID0gZ2xVbmlmb3JtTWF0cml4NGZ2OworICAgIHVzZVByb2dyYW0g
PSBnbFVzZVByb2dyYW07CisgICAgdmFsaWRhdGVQcm9ncmFtID0gZ2xWYWxpZGF0ZVByb2dyYW07
CisgICAgdmVydGV4QXR0cmliMWYgPSBnbFZlcnRleEF0dHJpYjFmOworICAgIHZlcnRleEF0dHJp
YjFmdiA9IGdsVmVydGV4QXR0cmliMWZ2OworICAgIHZlcnRleEF0dHJpYjJmID0gZ2xWZXJ0ZXhB
dHRyaWIyZjsKKyAgICB2ZXJ0ZXhBdHRyaWIyZnYgPSBnbFZlcnRleEF0dHJpYjJmdjsKKyAgICB2
ZXJ0ZXhBdHRyaWIzZiA9IGdsVmVydGV4QXR0cmliM2Y7CisgICAgdmVydGV4QXR0cmliM2Z2ID0g
Z2xWZXJ0ZXhBdHRyaWIzZnY7CisgICAgdmVydGV4QXR0cmliNGYgPSBnbFZlcnRleEF0dHJpYjRm
OworICAgIHZlcnRleEF0dHJpYjRmdiA9IGdsVmVydGV4QXR0cmliNGZ2OworICAgIHZlcnRleEF0
dHJpYlBvaW50ZXIgPSBnbFZlcnRleEF0dHJpYlBvaW50ZXI7CisjZW5kaWYKKworICAgIGlmICgh
bV92YWxpZCkgeworICAgICAgICBxV2FybmluZygiR3JhcGhpY3NDb250ZXh0M0Q6IEFsbCBuZWVk
ZWQgT3BlbkdMIGV4dGVuc2lvbnMgYXJlIG5vdCBhdmFpbGFibGUiKTsKKyAgICAgICAgbV92YWxp
ZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ2xHZW5UZXh0dXJlcygx
LCAmbV90ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9U
T19FREdFKTsKKyAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgMSwg
MSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCAwKTsKKworICAgIGdlbkZyYW1lYnVmZmVycygxLCAmbV9tYWluRmJvKTsK
KyAgICBtX2N1cnJlbnRGYm8gPSBtX21haW5GYm87CisKKyAgICBiaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX21haW5GYm8pOworCisgICAgZ2VuUmVuZGVy
YnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgYmluZFJlbmRlcmJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKyNpZmRlZiBHTF9ERVBU
SF9DT01QT05FTlQyNAorICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMjQsIDEsIDEpOworI2Vsc2UKKyAgICBy
ZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX0RF
UFRIX0NPTVBPTkVOVDE2LCAxLCAxKTsKKyNlbmRpZgorCisgICAgYmluZFJlbmRlcmJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAKKyAgICBmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBm
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKyAgICBnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7
CisKKyAgICBpZiAoY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewor
ICAgICAgICBxV2FybmluZygpIDw8ICJHcmFwaGljc0NvbnRleHQzRDogSW52YWxpZCBGQk8iIDw8
IGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKTsK
KyAgICAgICAgbV92YWxpZCA9IGZhbHNlOworICAgIH0KK30KKworR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQoreworICAgIGRlbGV0ZSBtX2ds
V2lkZ2V0OworICAgIG1fZ2xXaWRnZXQgPSAwOworfQorCit2b2lkKiBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpnZXRQcm9jQWRkcmVzcyhjb25zdCBRR0xDb250ZXh0KiBjdHgsIGNvbnN0IFFT
dHJpbmcmIHByb2MpCit7CisgICAgUVN0cmluZyBleHRbM10gPSB7ICIiLCAiQVJCIiwgIkVYVCIg
fTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgIHZvaWQqIGFk
ZHIgPSBjdHgtPmdldFByb2NBZGRyZXNzKFFMYXRpbjFTdHJpbmcoKHByb2MgKyBleHRbaV0pLnRv
TGF0aW4xKCkpKTsKKyAgICAgICAgaWYgKGFkZHIpIAorICAgICAgICAgICAgcmV0dXJuIGFkZHI7
CisgICAgfQorCisgICAgcVdhcm5pbmcoKSA8PCAiR3JhcGhpY3NDb250ZXh0M0Q6IG5vdCBmb3Vu
ZCIgPDwgcHJvYzsKKworICAgIG1fdmFsaWQgPSBmYWxzZTsKKyAgICByZXR1cm4gMDsKK30KKwor
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKK3sKKyAgICBPd25QdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzKSk7CisgICAg
cmV0dXJuIGNvbnRleHQtPm1faW50ZXJuYWwgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7Cit9CisK
K0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycykKKyAgICA6IG1faW50ZXJuYWwobmV3IEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwoYXR0cnMpKQoreworICAgIGlmICghbV9pbnRlcm5hbC0+aXNWYWxpZCgpKSAKKyAg
ICAgICAgbV9pbnRlcm5hbCA9IDA7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3ND
b250ZXh0M0QoKQoreworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29u
dGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICByZXR1cm4gbV9pbnRl
cm5hbC0+bV9nbFdpZGdldDsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1UZXh0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV90
ZXh0dXJlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQo
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisK
KyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CisgICAg
SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKworICAgIG1faW50
ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
aW50ZXJuYWwtPm1fbWFpbkZibyk7CisKKyAgICBnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50
V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgbV9pbnRl
cm5hbC0+bV9waXhlbHMuYml0cygpKTsKKworICAgIFFQYWludGVyKiBwID0gaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgcC0+ZHJhd0ltYWdlKDAsIDAsIG1f
aW50ZXJuYWwtPm1fcGl4ZWxzLnRyYW5zZm9ybWVkKFFNYXRyaXgoKS5yb3RhdGUoMTgwKSkpOwor
CisgICAgbV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9pbnRlcm5hbC0+bV9jdXJyZW50RmJvKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZW5kUGFpbnQoKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNo
YXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoKCh3aWR0aCA9PSBtX2N1cnJl
bnRXaWR0aCkgJiYgKGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpKSB8fCAoIW1faW50ZXJuYWwp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKKyAg
ICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CisKKyAgICBtX2ludGVybmFsLT5tX3BpeGVscyA9
IFFJbWFnZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBRSW1hZ2U6OkZvcm1hdF9B
UkdCMzIpOworCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKwor
ICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm5hbC0+bV90ZXh0dXJlKTsK
KyAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgd2lkdGgsIGhlaWdo
dCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCAwKTsKKyAgIAorICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1faW50ZXJuYWwtPm1fbWFpbkZibyk7Cisg
ICAgbV9pbnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBtX2ludGVybmFsLT5tX2RlcHRoQnVmZmVyKTsKKyNpZmRlZiBHTF9ERVBUSF9DT01Q
T05FTlQyNAorICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMjQsIHdpZHRoLCBoZWlnaHQpOworI2Vsc2UKKyAg
ICByZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdM
X0RFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgorICAgIG1faW50ZXJu
YWwtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7
CisgICAgCisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAs
IEdMX1RFWFRVUkVfMkQsIG1faW50ZXJuYWwtPm1fdGV4dHVyZSwgMCk7CisgICAgbV9pbnRlcm5h
bC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgbV9pbnRlcm5hbC0+bV9kZXB0aEJ1ZmZlcik7CisKKyAgICBHTGVudW0g
c3RhdHVzID0gbV9pbnRlcm5hbC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNz
Q29udGV4dDNEOjpyZXNoYXBlOiBJbnZhbGlkIEZCTyIgPDwgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpOworICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIH0KKworICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisgICAgZ2xG
bHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKHVuc2ln
bmVkIGxvbmcgdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFk
ZXIqIHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT5hdHRhY2hTaGFkZXIoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIChHTHVpbnQpIHNo
YWRlci0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmli
TG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YmluZEF0dHJpYkxv
Y2F0aW9uKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJpbmRCdWZmZXIodGFyZ2V0
LCBidWZmZXIgPyAoR0x1aW50KSBidWZmZXItPm9iamVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2Vi
R0xGcmFtZWJ1ZmZlciogYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+bV9jdXJyZW50RmJvID0gKGJ1ZmZlciAmJiBi
dWZmZXItPm9iamVjdCgpKSA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiBtX2ludGVybmFs
LT5tX21haW5GYm87CisgICAgbV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgbV9p
bnRlcm5hbC0+bV9jdXJyZW50RmJvKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymlu
ZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJl
bmRlcmJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIG1faW50ZXJuYWwtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZmZXIg
PyAoR0x1aW50KSByZW5kZXJidWZmZXItPm9iamVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFRleHR1
cmUqIHRleHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSA/IChHTHVpbnQpIHRleHR1cmUt
Pm9iamVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3Io
ZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xCbGVuZENv
bG9yKHN0YXRpY19jYXN0PGZsb2F0PihyZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW4pLCBz
dGF0aWNfY2FzdDxmbG9hdD4oYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9k
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGds
QmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRF
cXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2Rl
QWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2Zh
Y3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9
ICAgICAgIAorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZSh1bnNp
Z25lZCBsb25nIHNyY1JHQiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3Jj
QWxwaGEsIHVuc2lnbmVkIGxvbmcgZHN0QWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5ibGVuZEZ1bmNTZXBhcmF0ZShz
cmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVuc2ln
bmVkIGxvbmcgdXNhZ2UpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX2ludGVybmFsLT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2Up
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBXZWJHTEFycmF5KiBhcnJheSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBp
ZiAoIWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwt
PmJ1ZmZlckRhdGEodGFyZ2V0LCBhcnJheS0+Ynl0ZUxlbmd0aCgpLCBhcnJheS0+YmFzZUFkZHJl
c3MoKSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRh
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgV2ViR0xBcnJheSogYXJyYXkpCit7
CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmxlbmd0aCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheS0+Ynl0ZUxlbmd0aCgp
LCBhcnJheS0+YmFzZUFkZHJlc3MoKSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgR3JhcGhpY3NDb250
ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9p
bnRlcm5hbC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKGRvdWJsZSByLCBkb3VibGUgZywgZG91YmxlIGIsIGRv
dWJsZSBhKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xDbGVhckNvbG9yKHN0YXRpY19jYXN0PGZsb2F0PihyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGcpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYiksIHN0YXRpY19jYXN0PGZsb2F0PihhKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQ2xlYXIobWFz
ayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoZG91YmxlIGRlcHRo
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisjaWYgZGVm
aW5lZChRVF9PUEVOR0xfRVNfMikKKyAgICBnbENsZWFyRGVwdGhmKGRlcHRoKTsKKyNlbHNlCisg
ICAgZ2xDbGVhckRlcHRoKGRlcHRoKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhclN0ZW5jaWwobG9uZyBzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgZ2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBi
b29sIGFscGhhKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgZ2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7Cisg
ICAgQVNTRVJUKHNoYWRlcik7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX2ludGVybmFsLT5jb21waWxlU2hhZGVyKChHTHVpbnQpIHNoYWRlci0+b2Jq
ZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNp
Z25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1h
dCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0LCBsb25nIGJvcmRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVs
LCBsb25nIHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDdWxsRmFjZShtb2Rl
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcg
ZnVuYykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IGdsRGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1h
c2soYm9vbCBmbGFnKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgZ2xEZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcikKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIp
CisgICAgZ2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7CisjZWxzZQorICAgIGdsRGVwdGhSYW5n
ZSh6TmVhciwgekZhcik7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0
YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sK
KyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZXRhY2hTaGFk
ZXIoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2Fw
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xE
aXNhYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyh1
bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERyYXdBcnJheXMobW9kZSwg
Zmlyc3QsIGNvdW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRz
KHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0
eXBlLCBsb25nIG9mZnNldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIGdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUodW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEVuYWJsZShjYXApOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNp
Z25lZCBsb25nIGluZGV4KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xGaW5pc2goKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgZ2xGbHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2Vi
R0xSZW5kZXJidWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRh
cmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIgPyAoR0x1aW50KSBi
dWZmZXItPm9iamVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1l
YnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFj
aG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIGxv
bmcgbGV2ZWwpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQs
IHRleHRhcmdldCwgdGV4dHVyZSA/IChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpIDogMCwgbGV2
ZWwpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UodW5zaWduZWQgbG9u
ZyBtb2RlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xGcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVy
YXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2VuZXJhdGVNaXBtYXAodGFy
Z2V0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykK
K3sKKyAgICBpZiAoIXByb2dyYW0tPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50IG1heExl
bmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1aW50Pihw
cm9ncmFtLT5vYmplY3QoKSksIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heExl
bmd0aCk7CisKKyAgICBHTGNoYXIgbmFtZVttYXhMZW5ndGhdOyAKKyAgICBHTHNpemVpIG5hbWVM
ZW5ndGg7CisgICAgR0xpbnQgc2l6ZTsKKyAgICBHTGVudW0gdHlwZTsKKworICAgIG1faW50ZXJu
YWwtPmdldEFjdGl2ZUF0dHJpYihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgp
KSwgaW5kZXgsIG1heExlbmd0aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisK
KyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluZm8u
bmFtZSA9IFN0cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOwor
ICAgIGluZm8uc2l6ZSA9IHNpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJv
Z3JhbS0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbWF4TGVuZ3RoOworICAgIG1faW50
ZXJuYWwtPmdldFByb2dyYW1pdihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgp
KSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heExlbmd0aCk7CisKKyAgICBHTGNo
YXIgbmFtZVttYXhMZW5ndGhdOworICAgIEdMc2l6ZWkgbmFtZUxlbmd0aDsKKyAgICBHTGludCBz
aXplOworICAgIEdMZW51bSB0eXBlOworCisgICAgbV9pbnRlcm5hbC0+Z2V0QWN0aXZlVW5pZm9y
bShzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgaW5kZXgsIG1heExlbmd0
aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisKKyAgICBpZiAoIW5hbWVMZW5n
dGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1l
LCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNp
emU7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRB
dHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAtMTsKKyAgICAKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFs
LT5nZXRBdHRyaWJMb2NhdGlvbigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5h
bC0+bV9hdHRyczsKK30KKwordW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJy
b3IoKQoreworICAgIGlmIChtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAw
KSB7CisgICAgICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBpdGVyID0g
bV9pbnRlcm5hbC0+bV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKKyAgICAgICAgdW5zaWduZWQg
bG9uZyBlcnIgPSAqaXRlcjsKKyAgICAgICAgbV9pbnRlcm5hbC0+bV9zeW50aGV0aWNFcnJvcnMu
cmVtb3ZlKGl0ZXIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsR2V0RXJyb3IoKTsK
K30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBu
YW1lKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
cmV0dXJuIFN0cmluZygoY29uc3QgY2hhciopIGdsR2V0U3RyaW5nKG5hbWUpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6aGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBtb2RlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgZ2xIaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5pc0J1ZmZlcigoR0x1aW50KSBidWZm
ZXItPm9iamVjdCgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKHVu
c2lnbmVkIGxvbmcgY2FwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgcmV0dXJuIGdsSXNFbmFibGVkKGNhcCk7Cit9CisKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7
CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50
ZXJuYWwtPmlzRnJhbWVidWZmZXIoKEdMdWludCkgZnJhbWVidWZmZXItPm9iamVjdCgpKTsKK30K
KworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2lu
dGVybmFsLT5pc1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCitib29s
IEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVu
ZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+aXNSZW5kZXJidWZmZXIoKEdMdWludCkgcmVuZGVyYnVmZmVy
LT5vYmplY3QoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFdlYkdM
U2hhZGVyKiBzaGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IHJldHVybiBtX2ludGVybmFsLT5pc1NoYWRlcigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4
dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBn
bElzVGV4dHVyZSgoR0x1aW50KSB0ZXh0dXJlLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmxpbmVXaWR0aChkb3VibGUgd2lkdGgpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbExpbmVXaWR0aChzdGF0aWNfY2FzdDxm
bG9hdD4od2lkdGgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmxpbmtQ
cm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsUGl4ZWxT
dG9yZWkocG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdv
bk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFBvbHlnb25PZmZzZXQoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGZhY3RvciksIHN0YXRpY19jYXN0PGZsb2F0Pih1bml0cykpOworfQorCitQYXNz
UmVmUHRyPFdlYkdMQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwg
bG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWdu
ZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIAorICAgIGlmICh0eXBlICE9IEdMX1VOU0lH
TkVEX0JZVEUgfHwgZm9ybWF0ICE9IEdMX1JHQkEpCisgICAgICAgIHJldHVybiAwOworICAgICAg
ICAKKyAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gYXJyYXkgPSBXZWJHTFVuc2ln
bmVkQnl0ZUFycmF5OjpjcmVhdGUod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICBnbFJlYWRQaXhl
bHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAoR0x2b2lkKikgYXJyYXktPmRh
dGEoKSk7CisgICAgcmV0dXJuIGFycmF5OyAgICAKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9pbnRlcm5hbC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Ft
cGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU2FtcGxlQ292ZXJhZ2Uoc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHZhbHVlKSwgaW52ZXJ0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c2Npc3Nvcihsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJp
bmcmIHN0cmluZykKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICAKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgLy8gRm9yY2UgdG8gR0xTTCAxLjA6
CisgICAgLy8gaHR0cHM6Ly9jdnMua2hyb25vcy5vcmcvc3ZuL3JlcG9zL3JlZ2lzdHJ5L3RydW5r
L3B1YmxpYy93ZWJnbC9kb2Mvc3BlYy9XZWJHTC1zcGVjLmh0bWwjNC40CisgICAgLy8gRklYTUU6
IExpbmVzIGJlZ2lubmluZyB3aXRoICIjdmVyc2lvbiIgc2hvdWxkIGJlIHN0cmlwcGVkIG91dC4K
KworICAgIFN0cmluZyBwcmVwYXJlZDsKKyAgIAorICAgIHByZXBhcmVkLmFwcGVuZCgiI3ZlcnNp
b24gMTAwXG4iKTsKKyNpZmRlZiBRVF9PUEVOR0xfRVNfMgorICAgIHByZXBhcmVkLmFwcGVuZCgi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iKTsKKyNlbmRpZgorICAgIHByZXBhcmVkLmFwcGVu
ZChzdHJpbmcpOworCisgICAgY29uc3QgQ1N0cmluZyYgY3MgPSBwcmVwYXJlZC51dGY4KCk7Cisg
ICAgY29uc3QgY2hhciogcyA9IGNzLmRhdGEoKTsKKyAgICBpbnQgbGVuZ3RoID0gcHJlcGFyZWQu
bGVuZ3RoKCk7CisgICAgbV9pbnRlcm5hbC0+c2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlci0+
b2JqZWN0KCksIDEsICZzLCAmbGVuZ3RoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBt
YXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9u
ZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbEZ1bmNT
ZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFN0ZW5jaWxNYXNrKG1hc2spOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKHVuc2lnbmVkIGxv
bmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShm
YWNlLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKHVuc2ln
bmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU3Rl
bmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxPcFNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWls
LCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNp
bE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1l
LCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIGdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2FzdDxmbG9h
dD4odmFsdWUpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaSh1
bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgdmFsdWUpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFRleFBhcmFtZXRlcmkodGFy
Z2V0LCBwbmFtZSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0xZihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVu
aWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtMWZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlm
b3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51
bmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwt
PnVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxv
YXQgdjIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT51bmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJh
eSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00Zihsb25nIGxvY2F0aW9uLCBmbG9h
dCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00Zihsb2Nh
dGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtNGZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlm
b3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0xaShsb25nIGxvY2F0aW9uLCBpbnQgdjApCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMWkobG9j
YXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihsb25n
IGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xaXYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJp
KGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJpKGxvY2F0aW9u
LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KGxvbmcg
bG9jYXRpb24sIGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJpdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2ko
bG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGludCB2MikKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zaShs
b2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0zaXYobG9uZyBsb2NhdGlvbiwgaW50KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3Jt
M2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyLCBpbnQgdjMp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT51bmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIGFycmF5LCBp
bnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1faW50ZXJuYWwtPnVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBi
b29sIHRyYW5zcG9zZSwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRy
aXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNw
b3NlLCBmbG9hdCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJpeDNmdihsb2Nh
dGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0
KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXpl
LCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJv
Z3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAg
IAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRl
cm5hbC0+dXNlUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0p
Cit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmFsaWRhdGVQcm9ncmFtKChHTHVp
bnQpIHByb2dyYW0tPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVy
dGV4QXR0cmliMWYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCkKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0
dHJpYjFmKGluZHgsIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFycmF5KQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0
cmliMWZ2KGluZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52
ZXJ0ZXhBdHRyaWIyZihpbmR4LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT52ZXJ0ZXhBdHRyaWIyZnYoaW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2
MSwgZmxvYXQgdjIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIzZihpbmR4LCB2MCwgdjEsIHYyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcg
aW5keCwgZmxvYXQqIGFycmF5KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliM2Z2KGluZHgsIGFycmF5KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9u
ZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZl
cnRleEF0dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFycmF5
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+dmVydGV4QXR0cmliNGZ2KGluZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBz
aXplLCBpbnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5z
aWduZWQgbG9uZyBvZmZzZXQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUs
IHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgZ2xWaWV3cG9ydChzdGF0aWNfY2FzdDxHTGludD4oeCksIHN0YXRpY19jYXN0PEdMaW50
Pih5KSwgc3RhdGljX2Nhc3Q8R0xzaXplaT4od2lkdGgpLCBzdGF0aWNfY2FzdDxHTHNpemVpPiho
ZWlnaHQpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYodW5zaWdu
ZWQgbG9uZyBwbmFtZSwgdW5zaWduZWQgY2hhciogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+Z2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQq
IHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2
YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwg
YXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0SW50ZWdlcnYocG5h
bWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJu
YWwtPmdldFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgcG5hbWUsIHZhbHVl
KTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJH
TFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKworICAgIEdMaW50IGxlbmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFt
aXYoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0
aCk7CisKKyAgICBHTHNpemVpIHNpemU7CisKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikg
ZmFzdE1hbGxvYyhsZW5ndGgpOworICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJuICIiOwor
CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbUluZm9Mb2coKEdMdWludCkgcHJvZ3JhbS0+b2Jq
ZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOworCisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsK
KyAgICBmYXN0RnJlZShpbmZvKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihXZWJHTFNoYWRlciogc2hhZGVyLCB1bnNpZ25lZCBs
b25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0U2hh
ZGVyaXYoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgcG5hbWUsIHZhbHVlKTsKK30KKworU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFk
ZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAg
IEdMaW50IGxlbmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRTaGFkZXJpdigoR0x1aW50KSBzaGFk
ZXItPm9iamVjdCgpLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworCisgICAgR0xzaXpl
aSBzaXplOworICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7
CisgICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBtX2ludGVybmFsLT5n
ZXRTaGFkZXJJbmZvTG9nKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUs
IGluZm8pOworCisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZvKTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50IGxlbmd0aDsKKyAgICBtX2ludGVy
bmFsLT5nZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBHTF9TSEFERVJfU09V
UkNFX0xFTkdUSCwgJmxlbmd0aCk7CisKKyAgICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFyKiBp
bmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoIWluZm8pCisgICAg
ICAgIHJldHVybiAiIjsKKworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlclNvdXJjZSgoR0x1aW50
KSBzaGFkZXItPm9iamVjdCgpLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKKworICAgIFN0cmluZyBy
ZXN1bHQoaW5mbyk7CisgICAgZmFzdEZyZWUoaW5mbyk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xHZXRUZXhQYXJhbWV0
ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFRleFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBu
YW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1mdigo
R0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9u
ZyBsb2NhdGlvbiwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1pdigoR0x1aW50KSBwcm9n
cmFtLT5vYmplY3QoKSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKworbG9uZyBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICAKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRV
bmlmb3JtTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIG5hbWUudXRmOCgpLmRh
dGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KHVu
c2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJu
YWwtPmdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1
bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VmVydGV4QXR0cmliaXYo
aW5kZXgsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZl
cnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1l
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgCisg
ICAgdm9pZCogcG9pbnRlcjsKKyAgICBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJQb2ludGVy
dihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxs
b25nPihwb2ludGVyKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVk
IGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQoreworICAgIGdsVGV4SW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBm
b3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBJbWFn
ZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK3sKKyAgICBBU1NF
UlQoaW1hZ2UpOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIEdMdWludCBmb3JtYXQ7
CisgICAgR0x1aW50IGludGVybmFsRm9ybWF0OworCisgICAgaWYgKCFleHRyYWN0SW1hZ2VEYXRh
KGltYWdlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgaW1hZ2VEYXRhLCAmZm9ybWF0LCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmludGVybmFsRm9ybWF0KSkgeworICAgICAgICBxV2Fy
bmluZygpIDw8ICJHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRDogY291bGQgbm90IGV4dHJh
Y3QgSW1hZ2UgZGF0YSI7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBnbFRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFn
ZS0+aGVpZ2h0KCksIAorICAgICAgICAgICAgICAgICAwLCBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIGltYWdlRGF0YS5kYXRhKCkpOworCisgICAgcmV0dXJuIDA7Cit9CisgICAgCitpbnQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBs
ZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMp
Cit7CisgICAgZ2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIEltYWdlKiBpbWFnZSwgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQoreworICAgIEFTU0VSVChpbWFnZSk7CisK
KyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIEdMdWludCBmb3JtYXQ7CisgICAg
R0x1aW50IGludGVybmFsRm9ybWF0OworCisgICAgaWYgKCFleHRyYWN0SW1hZ2VEYXRhKGltYWdl
LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgaW1hZ2VEYXRhLCAmZm9ybWF0LCAmaW50ZXJuYWxG
b3JtYXQpKSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhT
dWJJbWFnZTJEOiBjb3VsZCBub3QgZXh0cmFjdCBJbWFnZSBkYXRhIjsKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIH0KKworICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5
b2ZmLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAKKyAgICAgICAgICAgICAgICAg
ICAgZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKKworICAgIHJl
dHVybiAwOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIEdMdWlu
dCBvOworICAgIG1faW50ZXJuYWwtPmdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOwor
fQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgR0x1aW50IG87
CisgICAgbV9pbnRlcm5hbC0+Z2VuRnJhbWVidWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsK
K30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50
ZXJuYWwtPmNyZWF0ZVByb2dyYW0oKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbzsKKyAgICBtX2ludGVybmFsLT5nZW5SZW5kZXJidWZm
ZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRl
U2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBH
TF9WRVJURVhfU0hBREVSKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZVRleHR1cmUoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgR0x1aW50IG87CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgcmV0dXJuIG87
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZm
ZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X2ludGVybmFsLT5kZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwt
PmRlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVQcm9ncmFtKHVuc2lnbmVkIHByb2dyYW0pCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVQ
cm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5k
ZXJidWZmZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlUmVuZGVyYnVmZmVy
cygxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
U2hhZGVyKHVuc2lnbmVkIHNoYWRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVNoYWRlcihzaGFkZXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERl
bGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpz
aXplSW5CeXRlcyhpbnQgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdM
X0JZVEU6CisgICAgICAgIHJldHVybiBzaXplb2YoR0xieXRlKTsKKyAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1Ynl0ZSk7CisgICAgY2FzZSBHTF9T
SE9SVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHNob3J0KTsKKyAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdXNob3J0KTsKKyAgICBjYXNlIEdM
X0lOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7CisgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICBjYXNlIEdMX0ZMT0FU
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiAwOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6
ZUdMRXJyb3IodW5zaWduZWQgbG9uZyBlcnJvcikKK3sKKyAgICBtX2ludGVybmFsLT5tX3N5bnRo
ZXRpY0Vycm9ycy5hZGQoZXJyb3IpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJ
bWFnZURhdGEoSW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sKiBoYXNBbHBoYUNoYW5uZWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFPcCogbmVlZGVkQWxwaGFPcCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGZvcm1hdCkKK3sKKyAg
ICBRSW1hZ2U6OkZvcm1hdCBpbWFnZUZvcm1hdCA9ICghcHJlbXVsdGlwbHlBbHBoYSkgPyAKKyAg
ICAgICAgUUltYWdlOjpGb3JtYXRfQVJHQjMyIDoKKyAgICAgICAgUUltYWdlOjpGb3JtYXRfQVJH
QjMyX1ByZW11bHRpcGxpZWQ7CisgCisgICAgUVBpeG1hcCogbmF0aXZlUGl4bWFwID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7IAorCisgICAgKmhhc0FscGhhQ2hhbm5lbCA9
IHRydWU7CisgICAgKm5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7CisgICAgKmZvcm1h
dCA9IEdMX1JHQkE7CisKKyAgICBRSW1hZ2UgbmF0aXZlSW1hZ2UgPSBuYXRpdmVQaXhtYXAtPnRv
SW1hZ2UoKS5jb252ZXJ0VG9Gb3JtYXQoaW1hZ2VGb3JtYXQpOworICAgIG91dHB1dFZlY3Rvci5h
cHBlbmQobmF0aXZlSW1hZ2UuYml0cygpLCBuYXRpdmVJbWFnZS5ieXRlQ291bnQoKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBiL1dlYktpdC9xdC9BcGkv
cXdlYnNldHRpbmdzLmNwcAppbmRleCBkNjBmMDljLi5lNmZkZjYxIDEwMDY0NAotLS0gYS9XZWJL
aXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGlu
Z3MuY3BwCkBAIC0xNTgsNiArMTU4LDEzIEBAIHZvaWQgUVdlYlNldHRpbmdzUHJpdmF0ZTo6YXBw
bHkoKQogCiAgICAgICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxl
ZCh2YWx1ZSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgICAgICB2YWx1ZSA9
IGF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwtPmF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRp
bmdzOjpXZWJHTEVuYWJsZWQpKTsKKworICAgICAgICBzZXR0aW5ncy0+c2V0V2ViR0xFbmFibGVk
KHZhbHVlKTsKKyNlbmRpZgorIAogICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUoUVdl
YlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6
OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cykpOwogICAgICAgICBzZXR0aW5ncy0+c2V0SmF2YVNj
cmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSh2YWx1ZSk7CkBAIC00MDEsNiArNDA4LDcg
QEAgUVdlYlNldHRpbmdzOjpRV2ViU2V0dGluZ3MoKQogICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0
KFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscywgZmFsc2UpOwog
ICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNj
ZXNzRmlsZVVybHMsIHRydWUpOwogICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5n
czo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIGZhbHNlKTsKKyAgICBkLT5hdHRyaWJ1
dGVzLmluc2VydChRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgZmFsc2UpOwogICAgIGQtPm9m
ZmxpbmVTdG9yYWdlRGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAgIGQtPmRlZmF1
bHRUZXh0RW5jb2RpbmcgPSBRTGF0aW4xU3RyaW5nKCJpc28tODg1OS0xIik7CiB9CmRpZmYgLS1n
aXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0
dGluZ3MuaAppbmRleCBiMWY1Y2YyLi4yOWMwMWI2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBp
L3F3ZWJzZXR0aW5ncy5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgKQEAgLTcw
LDcgKzcwLDggQEAgcHVibGljOgogICAgICAgICBMb2NhbENvbnRlbnRDYW5BY2Nlc3NGaWxlVXJs
cywKICAgICAgICAgRG5zUHJlZmV0Y2hFbmFibGVkLAogICAgICAgICBYU1NBdWRpdG9yRW5hYmxl
ZCwKLSAgICAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQKKyAgICAgICAgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsCisgICAgICAgIFdlYkdMRW5hYmxlZAogICAgIH07CiAg
ICAgZW51bSBXZWJHcmFwaGljIHsKICAgICAgICAgTWlzc2luZ0ltYWdlR3JhcGhpYywKZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDJk
MWE0ODMuLjQzYjdkMDMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEwLTAyLTIzICBKYXJra28gU2Fr
a2luZW4gIDxqYXJra28uc2Fra2luZW5AdGlldG8uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFF0IFdlYkdMIHN1cHBvcnQKKworICAgICAgICBB
ZGRzIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgb2YgV2ViR0wgc3VwcG9ydCB0byBRV2ViU2V0dGlu
Z3MuCisgICAgICAgIEFkZHMgJy0td2ViZ2wnIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgdG8gUUdW
TGF1bmNoZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTE1MworCisgICAgICAgICogQXBpL3F3ZWJzZXR0aW5ncy5jcHA6CisgICAgICAgIChRV2Vi
U2V0dGluZ3NQcml2YXRlOjphcHBseSk6CisgICAgICAgIChRV2ViU2V0dGluZ3M6OlFXZWJTZXR0
aW5ncyk6CisgICAgICAgICogQXBpL3F3ZWJzZXR0aW5ncy5oOgorICAgICAgICAqIFFHVkxhdW5j
aGVyL21haW4uY3BwOgorICAgICAgICAobWFpbik6CisKIDIwMTAtMDItMjMgIFN0ZXZlIEJsb2Nr
ICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1FHVkxhdW5jaGVyL21haW4uY3BwIGIvV2ViS2l0
L3F0L1FHVkxhdW5jaGVyL21haW4uY3BwCmluZGV4IDQ0OGI0YjAuLjMwN2UxMTggMTAwNjQ0Ci0t
LSBhL1dlYktpdC9xdC9RR1ZMYXVuY2hlci9tYWluLmNwcAorKysgYi9XZWJLaXQvcXQvUUdWTGF1
bmNoZXIvbWFpbi5jcHAKQEAgLTUyMSw2ICs1MjEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCiAgICAgICAgIHVybCA9IGFyZ3MuYXQoMSk7CiAgICAgaWYgKGFyZ3MuY29udGFp
bnMoIi0tY29tcG9zaXRpbmciKSkKICAgICAgICAgUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5n
cygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZCwgdHJ1ZSk7CisgICAgaWYgKGFyZ3MuY29udGFpbnMoIi0td2ViZ2wiKSkKKyAgICAgICAg
UVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdz
OjpXZWJHTEVuYWJsZWQsIHRydWUpOwogCiAgICAgTWFpbldpbmRvdyogd2luZG93ID0gbmV3IE1h
aW5XaW5kb3c7CiAgICAgd2luZG93LT5sb2FkKHVybCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggZTA2NjUxOS4uMzA5MThh
MiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTAyLTIzICBKYXJra28gU2Fra2luZW4gIDxq
YXJra28uc2Fra2luZW5AdGlldG8uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFF0IFdlYkdMIHN1cHBvcnQKKworICAgICAgICBBZGRzIHRvZ2ds
aW5nIG9mIFdlYkdMIHN1cHBvcnQgdG8gUXRMYXVuY2hlci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MTUzCisKKyAgICAgICAgKiBRdExhdW5jaGVy
L21haW4uY3BwOgorICAgICAgICAoTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZVdlYkdMKToKKyAgICAg
ICAgKExhdW5jaGVyV2luZG93OjpzZXR1cFVJKToKKwogMjAxMC0wMi0yMyAgTGFzemxvIEdvbWJv
cyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9RdExhdW5j
aGVyL21haW4uY3BwIGIvV2ViS2l0VG9vbHMvUXRMYXVuY2hlci9tYWluLmNwcAppbmRleCAxMjAz
Y2U3Li5iOGE2NzFiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9RdExhdW5jaGVyL21haW4uY3Bw
CisrKyBiL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAKQEAgLTExNiw2ICsxMTYsNyBA
QCBwcm90ZWN0ZWQgc2xvdHM6CiAKICAgICB2b2lkIHNldFRvdWNoTW9ja2luZyhib29sIG9uKTsK
ICAgICB2b2lkIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCB0b2dnbGUpOworICAg
IHZvaWQgdG9nZ2xlV2ViR0woYm9vbCB0b2dnbGUpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVZpZXco
Ym9vbCB1c2VHcmFwaGljc1ZpZXcgPSBmYWxzZSk7CiAKIHB1YmxpYyBzbG90czoKQEAgLTQ0NSw2
ICs0NDYsMTEgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZyhib29sIHRvZ2dsZSkKICAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShR
V2ViU2V0dGluZ3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCB0b2dnbGUpOwogfQog
Cit2b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVXZWJHTChib29sIHRvZ2dsZSkKK3sKKyAgICBw
YWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxl
ZCwgdG9nZ2xlKTsKK30KKwogdm9pZCBMYXVuY2hlcldpbmRvdzo6aW5pdGlhbGl6ZVZpZXcoYm9v
bCB1c2VHcmFwaGljc1ZpZXcpCiB7CiAgICAgZGVsZXRlIG1fdmlldzsKQEAgLTU1NCw2ICs1NjAs
MTAgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6c2V0dXBVSSgpCiAgICAgdG9nZ2xlR3JhcGhpY3NW
aWV3LT5zZXRDaGVja2FibGUodHJ1ZSk7CiAgICAgdG9nZ2xlR3JhcGhpY3NWaWV3LT5zZXRDaGVj
a2VkKGZhbHNlKTsKIAorICAgIFFBY3Rpb24qIHRvZ2dsZVdlYkdMID0gdG9vbHNNZW51LT5hZGRB
Y3Rpb24oIlRvZ2dsZSBXZWJHTCIsIHRoaXMsIFNMT1QodG9nZ2xlV2ViR0woYm9vbCkpKTsKKyAg
ICB0b2dnbGVXZWJHTC0+c2V0Q2hlY2thYmxlKHRydWUpOworICAgIHRvZ2dsZVdlYkdMLT5zZXRD
aGVja2VkKGZhbHNlKTsKKwogICAgIFFBY3Rpb24qIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmcgPSBncmFwaGljc1ZpZXdNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSBBY2NlbGVyYXRlZCBDb21w
b3NpdGluZyIsIHRoaXMsIFNMT1QodG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sKSkp
OwogICAgIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmctPnNldENoZWNrYWJsZSh0cnVlKTsK
ICAgICB0b2dnbGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nLT5zZXRDaGVja2VkKGZhbHNlKTsKQEAg
LTU2OSw2ICs1NzksOCBAQCB2b2lkIExhdW5jaGVyV2luZG93OjpzZXR1cFVJKCkKICAgICBmbGlw
WUFuaW1hdGVkID0gZ3JhcGhpY3NWaWV3TWVudS0+YWRkQWN0aW9uKCJBbmltYXRlZCBZLUZsaXAi
KTsKICAgICBmbGlwWUFuaW1hdGVkLT5jb25uZWN0KHRvZ2dsZUdyYXBoaWNzVmlldywgU0lHTkFM
KHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpKTsKICAgICBmbGlwWUFuaW1h
dGVkLT5zZXRFbmFibGVkKGZhbHNlKTsKKworCiB9CiAKIFFXZWJQYWdlKiBXZWJQYWdlOjpjcmVh
dGVXaW5kb3coUVdlYlBhZ2U6OldlYldpbmRvd1R5cGUgdHlwZSkK
</data>
<flag name="review"
          id="32135"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49372</attachid>
            <date>2010-02-24 02:52:48 -0800</date>
            <delta_ts>2010-02-24 05:23:30 -0800</delta_ts>
            <desc>Qt WebGL support</desc>
            <filename>qt-webgl-support-8.diff</filename>
            <type>text/plain</type>
            <size>78344</size>
            <attacher name="Jarkko Sakkinen">jarkko.sakkinen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjA2ZGIxZS4uZTk2NWQ1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzEgQEAKKzIwMTAtMDItMjMgIEphcmtrbyBTYWtr
aW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXQgV2ViR0wgc3VwcG9ydAorCisgICAgICAgIEFk
ZHMgR3JhcGhpY3NDb250ZXh0M0QgUXRXZWJLaXQgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTE1MworCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
Ojppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvY0FkZHJlc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Ymxl
bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlv
blNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1
bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFy
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpjb2xvck1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRo
RnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2Vu
ZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFj
dGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0
aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0
cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENv
bnRleHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjppc1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojppc1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6c3RlbmNpbE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnN0ZW5jaWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRl
eFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2
YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBv
aW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVn
ZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9n
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hh
ZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcklu
Zm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1l
dGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFt
ZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3Jt
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmli
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJp
Yk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisKIDIwMTAtMDItMjMgIFRvbnkgQ2hhbmcgIDx0
b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUucHJpIGIvV2ViQ29yZS9XZWJDb3JlLnByaQppbmRleCAyN2YxYmI2Li5m
Yzc5ZjhkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcmkKQEAgLTI4Nyw4ICsyODcsMTcgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICBodG1s
L2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5pZGwgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwgXAorICAgIGh0bWwv
Y2FudmFzL1dlYkdMQnVmZmVyLmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaWRsIFwKKyAg
ICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmJ1ZmZlci5pZGwgXAogICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5p
ZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbCBcCiAgICAgaHRtbC9jYW52YXMv
V2ViR0xTaG9ydEFycmF5LmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmlkbCBc
CisgICAgaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsIFwKICAgICBodG1sL2Nh
bnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xV
bnNpZ25lZEludEFycmF5LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0
QXJyYXkuaWRsIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IGM2MjUyMjQuLjhjYzk2MWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjY4NSw2ICsyNjg1LDg3IEBA
IFNPVVJDRVMgKz0gXAogfQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfM0RfQ0FOVkFT
PTEpIHsKK1FUICs9IG9wZW5nbAorSEVBREVSUyArPSBcCisJYmluZGluZ3MvanMvSlNXZWJHTEFy
cmF5QnVmZmVyQ29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEFycmF5SGVscGVy
LmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5k
aW5ncy9qcy9KU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pT
V2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFy
cmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25z
dHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3Ry
dWN0b3IuaCBcCisJaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCBcCisJaHRt
bC9jYW52YXMvQ2FudmFzT2JqZWN0LmggXAorCWh0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5o
IFwKKwlodG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdM
QXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xCeXRlQXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIFwK
KwlodG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xGcmFt
ZWJ1ZmZlci5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEdldEluZm8uaCBcCisJaHRtbC9jYW52YXMv
V2ViR0xJbnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaCBcCisJaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmggXAorCWh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmggXAorCWh0bWwvY2FudmFzL1dl
YkdMU2hvcnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaCBcCisJaHRtbC9j
YW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaCBcCisJ
aHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCAKKworU09VUkNFUyArPSBcCisJYmluZGluZ3MvanMv
SlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdM
QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0
b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmlu
ZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pz
L0pTV2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEludEFy
cmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMSW50QXJyYXlDdXN0b20u
Y3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgXAor
CWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5n
cy9qcy9KU1dlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xV
bnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVu
c2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVk
SW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZElu
dEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJh
eUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJh
eUN1c3RvbS5jcHAgXAorCWh0bWwvY2FudmFzL0NhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCBc
CisgICAgaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xB
cnJheUJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXkuY3BwIFwKKwlodG1sL2Nh
bnZhcy9XZWJHTEJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5LmNwcCBc
CisJaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgXAorCWh0bWwvY2FudmFz
L1dlYkdMRmxvYXRBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
IFwKKwlodG1sL2NhbnZhcy9XZWJHTEdldEluZm8uY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTElu
dEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcCBcCisJaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAgXAorCWh0bWwvY2FudmFz
L1dlYkdMU2hvcnRBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAgXAor
CWh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRB
cnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcCBcCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwIFwKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBcCisKK30KKworCiBpbmNsdWRl
KCQkUFdELy4uL1dlYktpdC9xdC9BcGkvaGVhZGVycy5wcmkpCiBpbmNsdWRlKC4uL2luY2x1ZGUv
UXRXZWJLaXQvY2xhc3NoZWFkZXJzLnByaSkKIEhFQURFUlMgKz0gJCRXRUJLSVRfQVBJX0hFQURF
UlMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRl
eCAwYTQxZGM2Li5jZjFkZjcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCkBAIC00NCw2ICs0NCwxMyBAQCB0eXBlZGVmIHZvaWQqIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0Q7CiBjb25zdCAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBOdWxs
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCA9IDA7CiB0eXBlZGVmIEdMdWludCBQbGF0Zm9ybTNE
T2JqZWN0OwogY29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7
CisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRdE9wZW5HTC9RdE9wZW5HTD4KKwordHlw
ZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOworY29uc3QgIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgPSAwOwordHlwZWRl
ZiBpbnQgUGxhdGZvcm0zRE9iamVjdDsKK2NvbnN0IFBsYXRmb3JtM0RPYmplY3QgTnVsbFBsYXRm
b3JtM0RPYmplY3QgPSAwOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRDsKIGNvbnN0ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIE51bGxQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEID0gMDsKQEAgLTczLDcgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIH07CiAKICAgICAvLyBGSVhNRTogaWRlYWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24g
YWxsIHBsYXRmb3Jtcy4KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpZiBQTEFURk9STShDSFJP
TUlVTSkgfHwgUExBVEZPUk0oUVQpCiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDsKICNlbmRpZgogCkBAIC00MDksNiArNDE2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2Vs
aWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0OwogICAgICAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpOwor
ICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OwogI2Vsc2UK
ICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKCkgY29uc3QgeyByZXR1cm4gTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7IH0KICAg
ICAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBO
dWxsUGxhdGZvcm0zRE9iamVjdDsgfQpAQCAtNzA0LDcgKzcxNCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNlbmRpZiAgICAgICAgCiAKICAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgdGhpcyB3
b3VsZCBiZSB1c2VkIG9uIGFsbCBwbGF0Zm9ybXMuCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pCisj
aWYgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKFFUKQogICAgICAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw+IG1faW50ZXJuYWw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwM2RmM2QKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC0wLDAgKzEs
MTYyNiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgVGlldG8gQ29ycG9yYXRpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgICAKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgi
CisjaW5jbHVkZSAiQ2FudmFzT2JqZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZv
LmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisj
aW5jbHVkZSAiV2ViR0xGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5o
IgorI2luY2x1ZGUgIldlYkdMSW50QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xUZXh0
dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oIgorI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisjaWYgIWRlZmluZWQoR0xjaGFyKQordHlwZWRlZiBjaGFyIEdMY2hhcjsKKyNl
bmRpZgorCisjaWYgIWRlZmluZWQoQVBJRU5UUlkpCisjZGVmaW5lIEFQSUVOVFJZCisjZW5kaWYK
KwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xBY3RpdmVUZXh0dXJlVHlwZSkgKEdMZW51bSk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEF0dGFjaFNoYWRlclR5cGUpIChHTHVpbnQsIEdM
dWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJpbmRBdHRyaWJMb2NhdGlvblR5cGUp
IChHTHVpbnQsIEdMdWludCwgY29uc3QgY2hhciopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xCaW5kQnVmZmVyVHlwZSkgKEdMZW51bSwgR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkqIGdsQmluZEZyYW1lYnVmZmVyVHlwZSkgKEdMZW51bSwgR0x1aW50KTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkqIGdsQmluZFJlbmRlcmJ1ZmZlclR5cGUpIChHTGVudW0sIEdMdWludCk7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJsZW5kQ29sb3JUeXBlKSAoR0xjbGFtcGYsIEdMY2xh
bXBmLCBHTGNsYW1wZiwgR0xjbGFtcGYpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCbGVu
ZEVxdWF0aW9uU2VwYXJhdGVUeXBlKShHTGVudW0sIEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZKiBnbEJsZW5kRnVuY1NlcGFyYXRlVHlwZSkoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRz
dFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEpOwordHlwZWRlZiB2b2lkIChB
UElFTlRSWSogZ2xCdWZmZXJEYXRhVHlwZSkgKEdMZW51bSwgR0xzaXplaXB0ciwgY29uc3QgR0x2
b2lkKiwgR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQnVmZmVyU3ViRGF0YVR5
cGUpIChHTGVudW0sIEdMaW50cHRyLCBHTHNpemVpcHRyLCBjb25zdCBHTHZvaWQqKTsKK3R5cGVk
ZWYgR0xlbnVtIChBUElFTlRSWSogZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzVHlwZSkgKEdMZW51
bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbENvbXBpbGVTaGFkZXJUeXBlKSAoR0x1aW50
KTsKK3R5cGVkZWYgR0x1aW50IChBUElFTlRSWSogZ2xDcmVhdGVQcm9ncmFtVHlwZSkgKCk7Cit0
eXBlZGVmIEdMdWludCAoQVBJRU5UUlkqIGdsQ3JlYXRlU2hhZGVyVHlwZSkgKEdMZW51bSk7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERlbGV0ZUJ1ZmZlcnNUeXBlKSAoR0xzaXplaSwgY29u
c3QgR0x1aW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERlbGV0ZUZyYW1lYnVmZmVy
c1R5cGUpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCopOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSogZ2xEZWxldGVQcm9ncmFtVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
KiBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlKSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqKTsK
K3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsRGVsZXRlU2hhZGVyVHlwZSkgKEdMdWludCk7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERldGFjaFNoYWRlclR5cGUpIChHTHVpbnQsIEdMdWlu
dCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheVR5
cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xFbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlclR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xlbnVtLCBHTHVpbnQpOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRFR5cGUpIChHTGVu
dW0sIEdMZW51bSwgR0xlbnVtLCBHTHVpbnQsIEdMaW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkqIGdsR2VuQnVmZmVyc1R5cGUpIChHTHNpemVpLCBHTHVpbnQqKTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkqIGdsR2VuZXJhdGVNaXBtYXBUeXBlKSAoR0xlbnVtIHRhcmdldCk7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZKiBnbEdlbkZyYW1lYnVmZmVyc1R5cGUpIChHTHNpemVpLCBHTHVpbnQq
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2VuUmVuZGVyYnVmZmVyc1R5cGUpIChHTHNp
emVpLCBHTHVpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0QWN0aXZlQXR0cmli
VHlwZSkgKEdMdWludCwgR0x1aW50LCBHTHNpemVpLCBHTHNpemVpKiwgR0xpbnQqLCBHTGVudW0q
LCBHTGNoYXIqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0QWN0aXZlVW5pZm9ybVR5
cGUpIChHTHVpbnQsIEdMdWludCwgR0xzaXplaSwgR0xzaXplaSosIEdMaW50KiwgR0xlbnVtKiwg
R0xjaGFyKik7Cit0eXBlZGVmIEdMaW50IChBUElFTlRSWSogZ2xHZXRBdHRyaWJMb2NhdGlvblR5
cGUpIChHTHVpbnQsIGNvbnN0IGNoYXIqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0
QnVmZmVyUGFyYW1ldGVyaXZUeXBlKSAoR0xlbnVtLCBHTGVudW0sIEdMaW50Kik7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZKiBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2VHlw
ZSkgKEdMZW51bSwgR0xlbnVtLCBHTGVudW0sIEdMaW50KiBwYXJhbXMpOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSogZ2xHZXRQcm9ncmFtSW5mb0xvZ1R5cGUpIChHTHVpbnQsIEdMc2l6ZWksIEdM
c2l6ZWkqLCBjaGFyKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldFByb2dyYW1pdlR5
cGUpIChHTHVpbnQsIEdMZW51bSwgR0xpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGds
R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZUeXBlKSAoR0xlbnVtLCBHTGVudW0sIEdMaW50Kik7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldFNoYWRlckluZm9Mb2dUeXBlKSAoR0x1aW50
LCBHTHNpemVpLCBHTHNpemVpKiwgY2hhciopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xH
ZXRTaGFkZXJpdlR5cGUpIChHTHVpbnQsIEdMZW51bSwgR0xpbnQqKTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkqIGdsR2V0U2hhZGVyU291cmNlVHlwZSkgKEdMdWludCwgR0xzaXplaSwgR0xzaXpl
aSosIGNoYXIqKTsKK3R5cGVkZWYgR0xpbnQgKEFQSUVOVFJZKiBnbEdldFVuaWZvcm1Mb2NhdGlv
blR5cGUpIChHTHVpbnQsIGNvbnN0IGNoYXIqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGds
R2V0VW5pZm9ybWZ2VHlwZSkgKEdMdWludCwgR0xpbnQsIEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkqIGdsR2V0VW5pZm9ybWl2VHlwZSkgKEdMdWludCwgR0xpbnQsIEdMaW50Kik7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldFZlcnRleEF0dHJpYmZ2VHlwZSkgKEdMdWlu
dCwgR0xlbnVtLCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldFZlcnRl
eEF0dHJpYml2VHlwZSkgKEdMdWludCwgR0xlbnVtLCBHTGludCopOwordHlwZWRlZiB2b2lkIChB
UElFTlRSWSogZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydlR5cGUpIChHTHVpbnQsIEdMZW51bSwg
R0x2b2lkKiopOwordHlwZWRlZiBHTGJvb2xlYW4gKEFQSUVOVFJZKiBnbElzQnVmZmVyVHlwZSkg
KEdMdWludCk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkqIGdsSXNGcmFtZWJ1ZmZlclR5
cGUpIChHTHVpbnQpOwordHlwZWRlZiBHTGJvb2xlYW4gKEFQSUVOVFJZKiBnbElzUHJvZ3JhbVR5
cGUpIChHTHVpbnQpOwordHlwZWRlZiBHTGJvb2xlYW4gKEFQSUVOVFJZKiBnbElzUmVuZGVyYnVm
ZmVyVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkqIGdsSXNTaGFk
ZXJUeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsTGlua1Byb2dyYW1U
eXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsUmVuZGVyYnVmZmVyU3Rv
cmFnZVR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xzaXplaSwgR0xzaXplaSk7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZKiBnbFNoYWRlclNvdXJjZVR5cGUpIChHTHVpbnQsIEdMc2l6ZWksIGNvbnN0
IGNoYXIqKiwgY29uc3QgR0xpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsU3RlbmNp
bEZ1bmNTZXBhcmF0ZVR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xpbnQsIEdMdWludCk7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFN0ZW5jaWxNYXNrU2VwYXJhdGVUeXBlKSAoR0xlbnVtLCBH
THVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xTdGVuY2lsT3BTZXBhcmF0ZVR5cGUp
IChHTGVudW0sIEdMZW51bSwgR0xlbnVtLCBHTGVudW0pOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSogZ2xVbmlmb3JtMWZUeXBlKSAoR0xpbnQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSogZ2xVbmlmb3JtMWZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0Kik7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0xaVR5cGUpIChHTGludCwgR0xpbnQp
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMWl2VHlwZSkgKEdMaW50LCBHTHNp
emVpLCBjb25zdCBHTGludCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMmZU
eXBlKSAoR0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xVbmlmb3JtMmZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0Kik7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0yaVR5cGUpIChHTGludCwgR0xpbnQsIEdMaW50
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTJpdlR5cGUpIChHTGludCwgR0xz
aXplaSwgY29uc3QgR0xpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTNm
VHlwZSkgKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkqIGdsVW5pZm9ybTNmdlR5cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xmbG9h
dCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtM2lUeXBlKSAoR0xpbnQsIEdM
aW50LCBHTGludCwgR0xpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtM2l2
VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGludCopOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSogZ2xVbmlmb3JtNGZUeXBlKSAoR0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQs
IEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtNGZ2VHlwZSkgKEdM
aW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bFVuaWZvcm00aVR5cGUpIChHTGludCwgR0xpbnQsIEdMaW50LCBHTGludCwgR0xpbnQpOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtNGl2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBj
b25zdCBHTGludCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtTWF0cml4MmZ2
VHlwZSkgKEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQqKTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybU1hdHJpeDNmdlR5cGUpIChHTGludCwgR0xzaXpl
aSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bFVuaWZvcm1NYXRyaXg0ZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3Qg
R0xmbG9hdCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVc2VQcm9ncmFtVHlwZSkgKEdM
dWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZhbGlkYXRlUHJvZ3JhbVR5cGUpIChH
THVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xWZXJ0ZXhBdHRyaWIxZlR5cGUpIChH
THVpbnQsIGNvbnN0IEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xWZXJ0ZXhB
dHRyaWIxZnZUeXBlKSAoR0x1aW50LCBjb25zdCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZKiBnbFZlcnRleEF0dHJpYjJmVHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCwgY29u
c3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjJmdlR5
cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGds
VmVydGV4QXR0cmliM2ZUeXBlKSAoR0x1aW50LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0
LCBjb25zdCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVmVydGV4QXR0cmli
M2Z2VHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCopOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSogZ2xWZXJ0ZXhBdHRyaWI0ZlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdM
ZmxvYXQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSogZ2xWZXJ0ZXhBdHRyaWI0ZnZUeXBlKSAoR0x1aW50LCBjb25zdCBHTGZsb2F0Kik7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYlBvaW50ZXJUeXBlKSAoR0x1aW50
LCBHTGludCwgR0xlbnVtLCBHTGJvb2xlYW4sIEdMc2l6ZWksIGNvbnN0IEdMdm9pZCopOworCitj
bGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKTsKKyAg
ICB+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOworCisgICAgYm9vbCBpc1ZhbGlkKCkgeyBy
ZXR1cm4gbV92YWxpZDsgfQorCisgICAgZ2xBY3RpdmVUZXh0dXJlVHlwZSBhY3RpdmVUZXh0dXJl
OworICAgIGdsQXR0YWNoU2hhZGVyVHlwZSBhdHRhY2hTaGFkZXI7CisgICAgZ2xCaW5kQXR0cmli
TG9jYXRpb25UeXBlIGJpbmRBdHRyaWJMb2NhdGlvbjsKKyAgICBnbEJpbmRCdWZmZXJUeXBlIGJp
bmRCdWZmZXI7CisgICAgZ2xCaW5kRnJhbWVidWZmZXJUeXBlIGJpbmRGcmFtZWJ1ZmZlcjsKKyAg
ICBnbEJpbmRSZW5kZXJidWZmZXJUeXBlIGJpbmRSZW5kZXJidWZmZXI7CisgICAgZ2xCbGVuZENv
bG9yVHlwZSBibGVuZENvbG9yOworICAgIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlVHlwZSBibGVu
ZEVxdWF0aW9uU2VwYXJhdGU7CisgICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZVR5cGUgYmxlbmRGdW5j
U2VwYXJhdGU7CisgICAgZ2xCdWZmZXJEYXRhVHlwZSBidWZmZXJEYXRhOworICAgIGdsQnVmZmVy
U3ViRGF0YVR5cGUgYnVmZmVyU3ViRGF0YTsKKyAgICBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNU
eXBlIGNoZWNrRnJhbWVidWZmZXJTdGF0dXM7CisgICAgZ2xDb21waWxlU2hhZGVyVHlwZSBjb21w
aWxlU2hhZGVyOworICAgIGdsQ3JlYXRlUHJvZ3JhbVR5cGUgY3JlYXRlUHJvZ3JhbTsKKyAgICBn
bENyZWF0ZVNoYWRlclR5cGUgY3JlYXRlU2hhZGVyOworICAgIGdsRGVsZXRlQnVmZmVyc1R5cGUg
ZGVsZXRlQnVmZmVyczsKKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc1R5cGUgZGVsZXRlRnJhbWVi
dWZmZXJzOworICAgIGdsRGVsZXRlUHJvZ3JhbVR5cGUgZGVsZXRlUHJvZ3JhbTsKKyAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlIGRlbGV0ZVJlbmRlcmJ1ZmZlcnM7CisgICAgZ2xEZWxldGVT
aGFkZXJUeXBlIGRlbGV0ZVNoYWRlcjsKKyAgICBnbERldGFjaFNoYWRlclR5cGUgZGV0YWNoU2hh
ZGVyOworICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSBkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXk7CisgICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGUgZW5hYmxlVmVydGV4
QXR0cmliQXJyYXk7CisgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlclR5cGUgZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXI7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRFR5cGUgZnJhbWVidWZm
ZXJUZXh0dXJlMkQ7CisgICAgZ2xHZW5CdWZmZXJzVHlwZSBnZW5CdWZmZXJzOworICAgIGdsR2Vu
ZXJhdGVNaXBtYXBUeXBlIGdlbmVyYXRlTWlwbWFwOworICAgIGdsR2VuRnJhbWVidWZmZXJzVHlw
ZSBnZW5GcmFtZWJ1ZmZlcnM7CisgICAgZ2xHZW5SZW5kZXJidWZmZXJzVHlwZSBnZW5SZW5kZXJi
dWZmZXJzOworICAgIGdsR2V0QWN0aXZlQXR0cmliVHlwZSBnZXRBY3RpdmVBdHRyaWI7CisgICAg
Z2xHZXRBY3RpdmVVbmlmb3JtVHlwZSBnZXRBY3RpdmVVbmlmb3JtOworICAgIGdsR2V0QXR0cmli
TG9jYXRpb25UeXBlIGdldEF0dHJpYkxvY2F0aW9uOworICAgIGdsR2V0QnVmZmVyUGFyYW1ldGVy
aXZUeXBlIGdldEJ1ZmZlclBhcmFtZXRlcml2OworICAgIGdsR2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXZUeXBlIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2Owor
ICAgIGdsR2V0UHJvZ3JhbUluZm9Mb2dUeXBlIGdldFByb2dyYW1JbmZvTG9nOworICAgIGdsR2V0
UHJvZ3JhbWl2VHlwZSBnZXRQcm9ncmFtaXY7CisgICAgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXJpdlR5cGUgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXY7CisgICAgZ2xHZXRTaGFkZXJJbmZv
TG9nVHlwZSBnZXRTaGFkZXJJbmZvTG9nOworICAgIGdsR2V0U2hhZGVyaXZUeXBlIGdldFNoYWRl
cml2OworICAgIGdsR2V0U2hhZGVyU291cmNlVHlwZSBnZXRTaGFkZXJTb3VyY2U7CisgICAgZ2xH
ZXRVbmlmb3JtZnZUeXBlIGdldFVuaWZvcm1mdjsKKyAgICBnbEdldFVuaWZvcm1pdlR5cGUgZ2V0
VW5pZm9ybWl2OworICAgIGdsR2V0VW5pZm9ybUxvY2F0aW9uVHlwZSBnZXRVbmlmb3JtTG9jYXRp
b247CisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJmdlR5cGUgZ2V0VmVydGV4QXR0cmliZnY7CisgICAg
Z2xHZXRWZXJ0ZXhBdHRyaWJpdlR5cGUgZ2V0VmVydGV4QXR0cmliaXY7CisgICAgZ2xHZXRWZXJ0
ZXhBdHRyaWJQb2ludGVydlR5cGUgZ2V0VmVydGV4QXR0cmliUG9pbnRlcnY7CisgICAgZ2xJc0J1
ZmZlclR5cGUgaXNCdWZmZXI7CisgICAgZ2xJc0ZyYW1lYnVmZmVyVHlwZSBpc0ZyYW1lYnVmZmVy
OworICAgIGdsSXNQcm9ncmFtVHlwZSBpc1Byb2dyYW07CisgICAgZ2xJc1JlbmRlcmJ1ZmZlclR5
cGUgaXNSZW5kZXJidWZmZXI7CisgICAgZ2xJc1NoYWRlclR5cGUgaXNTaGFkZXI7CisgICAgZ2xM
aW5rUHJvZ3JhbVR5cGUgbGlua1Byb2dyYW07CisgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlVHlw
ZSByZW5kZXJidWZmZXJTdG9yYWdlOworICAgIGdsU2hhZGVyU291cmNlVHlwZSBzaGFkZXJTb3Vy
Y2U7CisgICAgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlVHlwZSBzdGVuY2lsRnVuY1NlcGFyYXRlOwor
ICAgIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZVR5cGUgc3RlbmNpbE1hc2tTZXBhcmF0ZTsKKyAgICBn
bFN0ZW5jaWxPcFNlcGFyYXRlVHlwZSBzdGVuY2lsT3BTZXBhcmF0ZTsKKyAgICBnbFVuaWZvcm0x
ZlR5cGUgdW5pZm9ybTFmOworICAgIGdsVW5pZm9ybTFmdlR5cGUgdW5pZm9ybTFmdjsKKyAgICBn
bFVuaWZvcm0xaVR5cGUgdW5pZm9ybTFpOworICAgIGdsVW5pZm9ybTFpdlR5cGUgdW5pZm9ybTFp
djsKKyAgICBnbFVuaWZvcm0yZlR5cGUgdW5pZm9ybTJmOworICAgIGdsVW5pZm9ybTJmdlR5cGUg
dW5pZm9ybTJmdjsKKyAgICBnbFVuaWZvcm0yaVR5cGUgdW5pZm9ybTJpOworICAgIGdsVW5pZm9y
bTJpdlR5cGUgdW5pZm9ybTJpdjsKKyAgICBnbFVuaWZvcm0zZlR5cGUgdW5pZm9ybTNmOworICAg
IGdsVW5pZm9ybTNmdlR5cGUgdW5pZm9ybTNmdjsKKyAgICBnbFVuaWZvcm0zaVR5cGUgdW5pZm9y
bTNpOworICAgIGdsVW5pZm9ybTNpdlR5cGUgdW5pZm9ybTNpdjsKKyAgICBnbFVuaWZvcm00ZlR5
cGUgdW5pZm9ybTRmOworICAgIGdsVW5pZm9ybTRmdlR5cGUgdW5pZm9ybTRmdjsKKyAgICBnbFVu
aWZvcm00aVR5cGUgdW5pZm9ybTRpOworICAgIGdsVW5pZm9ybTRpdlR5cGUgdW5pZm9ybTRpdjsK
KyAgICBnbFVuaWZvcm1NYXRyaXgyZnZUeXBlIHVuaWZvcm1NYXRyaXgyZnY7CisgICAgZ2xVbmlm
b3JtTWF0cml4M2Z2VHlwZSB1bmlmb3JtTWF0cml4M2Z2OworICAgIGdsVW5pZm9ybU1hdHJpeDRm
dlR5cGUgdW5pZm9ybU1hdHJpeDRmdjsKKyAgICBnbFVzZVByb2dyYW1UeXBlIHVzZVByb2dyYW07
CisgICAgZ2xWYWxpZGF0ZVByb2dyYW1UeXBlIHZhbGlkYXRlUHJvZ3JhbTsKKyAgICBnbFZlcnRl
eEF0dHJpYjFmVHlwZSB2ZXJ0ZXhBdHRyaWIxZjsKKyAgICBnbFZlcnRleEF0dHJpYjFmdlR5cGUg
dmVydGV4QXR0cmliMWZ2OworICAgIGdsVmVydGV4QXR0cmliMmZUeXBlIHZlcnRleEF0dHJpYjJm
OworICAgIGdsVmVydGV4QXR0cmliMmZ2VHlwZSB2ZXJ0ZXhBdHRyaWIyZnY7CisgICAgZ2xWZXJ0
ZXhBdHRyaWIzZlR5cGUgdmVydGV4QXR0cmliM2Y7CisgICAgZ2xWZXJ0ZXhBdHRyaWIzZnZUeXBl
IHZlcnRleEF0dHJpYjNmdjsKKyAgICBnbFZlcnRleEF0dHJpYjRmVHlwZSB2ZXJ0ZXhBdHRyaWI0
ZjsKKyAgICBnbFZlcnRleEF0dHJpYjRmdlR5cGUgdmVydGV4QXR0cmliNGZ2OworICAgIGdsVmVy
dGV4QXR0cmliUG9pbnRlclR5cGUgdmVydGV4QXR0cmliUG9pbnRlcjsKKworICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cnM7CisgICAgUUdMV2lkZ2V0KiBtX2dsV2lkZ2V0
OworICAgIEdMdWludCBtX3RleHR1cmU7CisgICAgR0x1aW50IG1fbWFpbkZibzsKKyAgICBHTHVp
bnQgbV9jdXJyZW50RmJvOworICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOworICAgIFFJbWFnZSBt
X3BpeGVsczsKKyAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBtX3N5bnRoZXRpY0Vycm9y
czsKKworcHJpdmF0ZToKKyAgICB2b2lkKiBnZXRQcm9jQWRkcmVzcyhjb25zdCBRR0xDb250ZXh0
KiBjdHgsIGNvbnN0IFFTdHJpbmcmIHByb2MpOworICAgIGJvb2wgbV92YWxpZDsKK307CisKKyNp
ZiBkZWZpbmVkIChRVF9PUEVOR0xfRVNfMikgCisjZGVmaW5lIEdFVF9QUk9DX0FERFJFU1MoUHJv
YykgUHJvYworI2Vsc2UKKyNkZWZpbmUgR0VUX1BST0NfQUREUkVTUyhQcm9jKSByZWludGVycHJl
dF9jYXN0PFByb2MjI1R5cGU+KGdldFByb2NBZGRyZXNzKGN0eCwgI1Byb2MpKTsKKyNlbmRpZgor
IAorR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKKyAgICA6IG1fYXR0cnMoYXR0cnMp
CisgICAgLCBtX2dsV2lkZ2V0KDApCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1fbWFpbkZi
bygwKQorICAgICwgbV9jdXJyZW50RmJvKDApCisgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAg
LCBtX3ZhbGlkKHRydWUpCit7CisgICAgbV9hdHRycy5hbHBoYSA9IHRydWU7CisgICAgbV9hdHRy
cy5kZXB0aCA9IHRydWU7CisgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgbV9hdHRy
cy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICBtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRy
dWU7CisKKyAgICBRR0xGb3JtYXQgZm9ybWF0OworCisgICAgZm9ybWF0LnNldERlcHRoKHRydWUp
OworICAgIGZvcm1hdC5zZXRTYW1wbGVCdWZmZXJzKHRydWUpOworICAgIGZvcm1hdC5zZXRTdGVu
Y2lsKGZhbHNlKTsKKworICAgIG1fZ2xXaWRnZXQgPSBuZXcgUUdMV2lkZ2V0KGZvcm1hdCk7Cisg
ICAgaWYgKCFtX2dsV2lkZ2V0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgcVdhcm5pbmcoIkdyYXBo
aWNzQ29udGV4dDNEOiBRR0xXaWRnZXQgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGNvbnRleHQiKTsK
KyAgICAgICAgbV92YWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIGNvbnN0IFFHTENvbnRleHQqIGN0eCA9
IG1fZ2xXaWRnZXQtPmNvbnRleHQoKTsKKworICAgIGFjdGl2ZVRleHR1cmUgPSBHRVRfUFJPQ19B
RERSRVNTKGdsQWN0aXZlVGV4dHVyZSk7CisgICAgYXR0YWNoU2hhZGVyID0gR0VUX1BST0NfQURE
UkVTUyhnbEF0dGFjaFNoYWRlcik7CisgICAgYmluZEF0dHJpYkxvY2F0aW9uID0gR0VUX1BST0Nf
QUREUkVTUyhnbEJpbmRBdHRyaWJMb2NhdGlvbik7CisgICAgYmluZEJ1ZmZlciA9IEdFVF9QUk9D
X0FERFJFU1MoZ2xCaW5kQnVmZmVyKTsKKyAgICBiaW5kRnJhbWVidWZmZXIgPSBHRVRfUFJPQ19B
RERSRVNTKGdsQmluZEZyYW1lYnVmZmVyKTsKKyAgICBiaW5kUmVuZGVyYnVmZmVyID0gR0VUX1BS
T0NfQUREUkVTUyhnbEJpbmRSZW5kZXJidWZmZXIpOworICAgIGJsZW5kQ29sb3IgPSBHRVRfUFJP
Q19BRERSRVNTKGdsQmxlbmRDb2xvcik7CisgICAgYmxlbmRFcXVhdGlvblNlcGFyYXRlID0gR0VU
X1BST0NfQUREUkVTUyhnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZSk7CisgICAgYmxlbmRGdW5jU2Vw
YXJhdGUgPSBHRVRfUFJPQ19BRERSRVNTKGdsQmxlbmRGdW5jU2VwYXJhdGUpOworICAgIGJ1ZmZl
ckRhdGEgPSBHRVRfUFJPQ19BRERSRVNTKGdsQnVmZmVyRGF0YSk7CisgICAgYnVmZmVyU3ViRGF0
YSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xCdWZmZXJTdWJEYXRhKTsKKyAgICBjaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzID0gR0VUX1BST0NfQUREUkVTUyhnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMpOwor
ICAgIGNvbXBpbGVTaGFkZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsQ29tcGlsZVNoYWRlcik7Cisg
ICAgY3JlYXRlUHJvZ3JhbSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xDcmVhdGVQcm9ncmFtKTsKKyAg
ICBjcmVhdGVTaGFkZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsQ3JlYXRlU2hhZGVyKTsKKyAgICBk
ZWxldGVCdWZmZXJzID0gR0VUX1BST0NfQUREUkVTUyhnbERlbGV0ZUJ1ZmZlcnMpOworICAgIGRl
bGV0ZUZyYW1lYnVmZmVycyA9IEdFVF9QUk9DX0FERFJFU1MoZ2xEZWxldGVGcmFtZWJ1ZmZlcnMp
OworICAgIGRlbGV0ZVByb2dyYW0gPSBHRVRfUFJPQ19BRERSRVNTKGdsRGVsZXRlUHJvZ3JhbSk7
CisgICAgZGVsZXRlUmVuZGVyYnVmZmVycyA9IEdFVF9QUk9DX0FERFJFU1MoZ2xEZWxldGVSZW5k
ZXJidWZmZXJzKTsKKyAgICBkZWxldGVTaGFkZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsRGVsZXRl
U2hhZGVyKTsKKyAgICBkZXRhY2hTaGFkZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsRGV0YWNoU2hh
ZGVyKTsKKyAgICBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkgPSBHRVRfUFJPQ19BRERSRVNTKGds
RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KTsKKyAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSA9
IEdFVF9QUk9DX0FERFJFU1MoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSk7CisgICAgZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIpOworICAgIGZyYW1lYnVmZmVyVGV4dHVyZTJEID0gR0VUX1BST0NfQUREUkVTUyhnbEZy
YW1lYnVmZmVyVGV4dHVyZTJEKTsKKyAgICBnZW5CdWZmZXJzID0gR0VUX1BST0NfQUREUkVTUyhn
bEdlbkJ1ZmZlcnMpOworICAgIGdlbmVyYXRlTWlwbWFwID0gR0VUX1BST0NfQUREUkVTUyhnbEdl
bmVyYXRlTWlwbWFwKTsKKyAgICBnZW5GcmFtZWJ1ZmZlcnMgPSBHRVRfUFJPQ19BRERSRVNTKGds
R2VuRnJhbWVidWZmZXJzKTsKKyAgICBnZW5SZW5kZXJidWZmZXJzID0gR0VUX1BST0NfQUREUkVT
UyhnbEdlblJlbmRlcmJ1ZmZlcnMpOworICAgIGdldEFjdGl2ZUF0dHJpYiA9IEdFVF9QUk9DX0FE
RFJFU1MoZ2xHZXRBY3RpdmVBdHRyaWIpOworICAgIGdldEFjdGl2ZVVuaWZvcm0gPSBHRVRfUFJP
Q19BRERSRVNTKGdsR2V0QWN0aXZlVW5pZm9ybSk7CisgICAgZ2V0QXR0cmliTG9jYXRpb24gPSBH
RVRfUFJPQ19BRERSRVNTKGdsR2V0QXR0cmliTG9jYXRpb24pOworICAgIGdldEJ1ZmZlclBhcmFt
ZXRlcml2ID0gR0VUX1BST0NfQUREUkVTUyhnbEdldEJ1ZmZlclBhcmFtZXRlcml2KTsKKyAgICBn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xH
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdik7CisgICAgZ2V0UHJvZ3JhbUluZm9M
b2cgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0UHJvZ3JhbUluZm9Mb2cpOworICAgIGdldFByb2dy
YW1pdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRQcm9ncmFtaXYpOworICAgIGdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcml2ID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcml2KTsKKyAgICBnZXRTaGFkZXJJbmZvTG9nID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFNo
YWRlckluZm9Mb2cpOworICAgIGdldFNoYWRlcml2ID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFNo
YWRlcml2KTsKKyAgICBnZXRTaGFkZXJTb3VyY2UgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0U2hh
ZGVyU291cmNlKTsKKyAgICBnZXRVbmlmb3JtZnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0VW5p
Zm9ybWZ2KTsKKyAgICBnZXRVbmlmb3JtaXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0VW5pZm9y
bWl2KTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24gPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0VW5p
Zm9ybUxvY2F0aW9uKTsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJmdiA9IEdFVF9QUk9DX0FERFJFU1Mo
Z2xHZXRWZXJ0ZXhBdHRyaWJmdik7CisgICAgZ2V0VmVydGV4QXR0cmliaXYgPSBHRVRfUFJPQ19B
RERSRVNTKGdsR2V0VmVydGV4QXR0cmliaXYpOworICAgIGdldFZlcnRleEF0dHJpYlBvaW50ZXJ2
ID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KTsKKyAgICBpc0J1
ZmZlciA9IEdFVF9QUk9DX0FERFJFU1MoZ2xJc0J1ZmZlcik7CisgICAgaXNGcmFtZWJ1ZmZlciA9
IEdFVF9QUk9DX0FERFJFU1MoZ2xJc0ZyYW1lYnVmZmVyKTsKKyAgICBpc1Byb2dyYW0gPSBHRVRf
UFJPQ19BRERSRVNTKGdsSXNQcm9ncmFtKTsKKyAgICBpc1JlbmRlcmJ1ZmZlciA9IEdFVF9QUk9D
X0FERFJFU1MoZ2xJc1JlbmRlcmJ1ZmZlcik7CisgICAgaXNTaGFkZXIgPSBHRVRfUFJPQ19BRERS
RVNTKGdsSXNTaGFkZXIpOworICAgIGxpbmtQcm9ncmFtID0gR0VUX1BST0NfQUREUkVTUyhnbExp
bmtQcm9ncmFtKTsKKyAgICByZW5kZXJidWZmZXJTdG9yYWdlID0gR0VUX1BST0NfQUREUkVTUyhn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2UpOworICAgIHNoYWRlclNvdXJjZSA9IEdFVF9QUk9DX0FERFJF
U1MoZ2xTaGFkZXJTb3VyY2UpOworICAgIHN0ZW5jaWxGdW5jU2VwYXJhdGUgPSBHRVRfUFJPQ19B
RERSRVNTKGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSk7CisgICAgc3RlbmNpbE1hc2tTZXBhcmF0ZSA9
IEdFVF9QUk9DX0FERFJFU1MoZ2xTdGVuY2lsTWFza1NlcGFyYXRlKTsKKyAgICBzdGVuY2lsT3BT
ZXBhcmF0ZSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xTdGVuY2lsT3BTZXBhcmF0ZSk7CisgICAgdW5p
Zm9ybTFmID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm0xZik7CisgICAgdW5pZm9ybTFmdiA9
IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtMWZ2KTsKKyAgICB1bmlmb3JtMWkgPSBHRVRfUFJP
Q19BRERSRVNTKGdsVW5pZm9ybTFpKTsKKyAgICB1bmlmb3JtMWl2ID0gR0VUX1BST0NfQUREUkVT
UyhnbFVuaWZvcm0xaXYpOworICAgIHVuaWZvcm0yZiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlm
b3JtMmYpOworICAgIHVuaWZvcm0yZnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTJmdik7
CisgICAgdW5pZm9ybTJpID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm0yaSk7CisgICAgdW5p
Zm9ybTJpdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtMml2KTsKKyAgICB1bmlmb3JtM2Yg
PSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTNmKTsKKyAgICB1bmlmb3JtM2Z2ID0gR0VUX1BS
T0NfQUREUkVTUyhnbFVuaWZvcm0zZnYpOworICAgIHVuaWZvcm0zaSA9IEdFVF9QUk9DX0FERFJF
U1MoZ2xVbmlmb3JtM2kpOworICAgIHVuaWZvcm0zaXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5p
Zm9ybTNpdik7CisgICAgdW5pZm9ybTRmID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm00Zik7
CisgICAgdW5pZm9ybTRmdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtNGZ2KTsKKyAgICB1
bmlmb3JtNGkgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTRpKTsKKyAgICB1bmlmb3JtNGl2
ID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm00aXYpOworICAgIHVuaWZvcm1NYXRyaXgyZnYg
PSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybU1hdHJpeDJmdik7CisgICAgdW5pZm9ybU1hdHJp
eDNmdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtTWF0cml4M2Z2KTsKKyAgICB1bmlmb3Jt
TWF0cml4NGZ2ID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm1NYXRyaXg0ZnYpOworICAgIHVz
ZVByb2dyYW0gPSBHRVRfUFJPQ19BRERSRVNTKGdsVXNlUHJvZ3JhbSk7CisgICAgdmFsaWRhdGVQ
cm9ncmFtID0gR0VUX1BST0NfQUREUkVTUyhnbFZhbGlkYXRlUHJvZ3JhbSk7CisgICAgdmVydGV4
QXR0cmliMWYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVmVydGV4QXR0cmliMWYpOworICAgIHZlcnRl
eEF0dHJpYjFmdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xWZXJ0ZXhBdHRyaWIxZnYpOworICAgIHZl
cnRleEF0dHJpYjJmID0gR0VUX1BST0NfQUREUkVTUyhnbFZlcnRleEF0dHJpYjJmKTsKKyAgICB2
ZXJ0ZXhBdHRyaWIyZnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVmVydGV4QXR0cmliMmZ2KTsKKyAg
ICB2ZXJ0ZXhBdHRyaWIzZiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xWZXJ0ZXhBdHRyaWIzZik7Cisg
ICAgdmVydGV4QXR0cmliM2Z2ID0gR0VUX1BST0NfQUREUkVTUyhnbFZlcnRleEF0dHJpYjNmdik7
CisgICAgdmVydGV4QXR0cmliNGYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVmVydGV4QXR0cmliNGYp
OworICAgIHZlcnRleEF0dHJpYjRmdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xWZXJ0ZXhBdHRyaWI0
ZnYpOworICAgIHZlcnRleEF0dHJpYlBvaW50ZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsVmVydGV4
QXR0cmliUG9pbnRlcik7CisKKyAgICBpZiAoIW1fdmFsaWQpIHsKKyAgICAgICAgcVdhcm5pbmco
IkdyYXBoaWNzQ29udGV4dDNEOiBBbGwgbmVlZGVkIE9wZW5HTCBleHRlbnNpb25zIGFyZSBub3Qg
YXZhaWxhYmxlIik7CisgICAgICAgIG1fdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICBnbFRl
eFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAg
IGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7
CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpOworICAgIGdsVGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAg
Z2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisKKyAgICBn
ZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbWFpbkZibyk7CisgICAgbV9jdXJyZW50RmJvID0gbV9tYWlu
RmJvOworCisgICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9tYWluRmJvKTsKKworICAgIGdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIp
OworICAgIGJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
bV9kZXB0aEJ1ZmZlcik7CisjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKKyAgICByZW5kZXJi
dWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQyNCwgMSwgMSk7CisjZWxzZQorICAgIHJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0NPTVBPTkVOVDE2LCAxLCAxKTsKKyNlbmRpZgorCisgICAgYmluZFJlbmRlcmJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAKKyAgICBmcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG1fdGV4dHVyZSwgMCk7CisgICAgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgZ2xD
bGVhckNvbG9yKDAsIDAsIDAsIDApOworCisgICAgaWYgKGNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgcVdhcm5pbmcoKSA8PCAiR3JhcGhpY3NDb250
ZXh0M0Q6IEludmFsaWQgRkJPIiA8PCBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUik7CisgICAgICAgIG1fdmFsaWQgPSBmYWxzZTsKKyAgICB9Cit9
CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFs
KCkKK3sKKyAgICBkZWxldGUgbV9nbFdpZGdldDsKKyAgICBtX2dsV2lkZ2V0ID0gMDsKK30KKwor
dm9pZCogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvY0FkZHJlc3MoY29uc3QgUUdM
Q29udGV4dCogY3R4LCBjb25zdCBRU3RyaW5nJiBwcm9jKQoreworICAgIFFTdHJpbmcgZXh0WzNd
ID0geyAiIiwgIkFSQiIsICJFWFQiIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkr
KykgeworICAgICAgICB2b2lkKiBhZGRyID0gY3R4LT5nZXRQcm9jQWRkcmVzcyhRTGF0aW4xU3Ry
aW5nKChwcm9jICsgZXh0W2ldKS50b0xhdGluMSgpKSk7CisgICAgICAgIGlmIChhZGRyKSAKKyAg
ICAgICAgICAgIHJldHVybiBhZGRyOworICAgIH0KKworICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBo
aWNzQ29udGV4dDNEOiBub3QgZm91bmQiIDw8IHByb2M7CisKKyAgICBtX3ZhbGlkID0gZmFsc2U7
CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMp
Cit7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KG5ldyBHcmFwaGljc0Nv
bnRleHQzRChhdHRycykpOworICAgIHJldHVybiBjb250ZXh0LT5tX2ludGVybmFsID8gY29udGV4
dC5yZWxlYXNlKCkgOiAwOworfQorCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCisgICAgOiBtX2ludGVybmFs
KG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGF0dHJzKSkKK3sKKyAgICBpZiAoIW1faW50
ZXJuYWwtPmlzVmFsaWQoKSkgCisgICAgICAgIG1faW50ZXJuYWwgPSAwOworfQorCitHcmFwaGlj
c0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKK3sKK30KKworUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgp
Cit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQ7Cit9CisKK1BsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1faW50ZXJuYWwtPm1fdGV4dHVyZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNv
bnRleHQtPmNhbnZhcygpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+
YnVmZmVyKCk7CisKKyAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ludGVybmFsLT5tX21haW5GYm8pOworCisgICAgZ2xSZWFk
UGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV9pbnRlcm5h
bC0+bV9waXhlbHMuYml0cygpKTsKKworICAgIFFQYWludGVyKiBwID0gaW1hZ2VCdWZmZXItPmNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgcC0+ZHJhd0ltYWdlKDAsIDAsIG1faW50
ZXJuYWwtPm1fcGl4ZWxzLnRyYW5zZm9ybWVkKFFNYXRyaXgoKS5yb3RhdGUoMTgwKSkpOworCisg
ICAgbV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgbV9pbnRlcm5hbC0+bV9jdXJyZW50RmJvKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZW5kUGFpbnQoKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBl
KGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoKCh3aWR0aCA9PSBtX2N1cnJlbnRX
aWR0aCkgJiYgKGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpKSB8fCAoIW1faW50ZXJuYWwpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKKyAgICBt
X2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CisKKyAgICBtX2ludGVybmFsLT5tX3BpeGVscyA9IFFJ
bWFnZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBRSW1hZ2U6OkZvcm1hdF9BUkdC
MzIpOworCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAg
IGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faW50ZXJuYWwt
Pm1fdGV4dHVyZSk7CisgICAgZ2xUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsK
KyAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKyAg
IAorICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1faW50ZXJuYWwtPm1fbWFpbkZibyk7CisgICAgbV9pbnRlcm5hbC0+YmluZFJl
bmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2ludGVybmFsLT5t
X2RlcHRoQnVmZmVyKTsKKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIHJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDI0LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbHNlCisgICAgcmVu
ZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworI2VuZGlmCisg
ICAgbV9pbnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCAwKTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faW50ZXJuYWwtPm1f
dGV4dHVyZSwgMCk7CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRU
QUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9pbnRlcm5hbC0+bV9k
ZXB0aEJ1ZmZlcik7CisKKyAgICBHTGVudW0gc3RhdHVzID0gbV9pbnRlcm5hbC0+Y2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpOworICAgIGlmIChz
dGF0dXMgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAg
ICAgIHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlOiBJbnZhbGlkIEZC
TyIgPDwgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIpOworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIGdsQ2xlYXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOworICAgIGdsRmx1c2goKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1
cmUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0
dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7
CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YXR0YWNoU2hh
ZGVyKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCAoR0x1aW50KSBzaGFkZXItPm9iamVjdCgp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJpbmRBdHRyaWJMb2NhdGlvbigoR0x1aW50
KSBwcm9ncmFtLT5vYmplY3QoKSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdl
YkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5iaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyID8gKEdM
dWludCkgYnVmZmVyLT5vYmplY3QoKSA6IDApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIq
IGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1faW50ZXJuYWwtPm1fY3VycmVudEZibyA9IChidWZmZXIgJiYgYnVmZmVyLT5vYmplY3Qo
KSkgPyAoR0x1aW50KSBidWZmZXItPm9iamVjdCgpIDogbV9pbnRlcm5hbC0+bV9tYWluRmJvOwor
ICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG1faW50ZXJuYWwtPm1fY3Vy
cmVudEZibyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyID8gKEdMdWludCkgcmVu
ZGVyYnVmZmVyLT5vYmplY3QoKSA6IDApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xCaW5k
VGV4dHVyZSh0YXJnZXQsIHRleHR1cmUgPyAoR0x1aW50KSB0ZXh0dXJlLT5vYmplY3QoKSA6IDAp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKGRvdWJsZSByZWQsIGRv
dWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQmxlbmRDb2xvcihzdGF0aWNfY2Fz
dDxmbG9hdD4ocmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGJsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbih1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEJsZW5kRXF1YXRpb24o
bW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9kZUFscGhhKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVk
IGxvbmcgZGZhY3RvcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIGdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOworfSAgICAgICAKKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNS
R0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25l
ZCBsb25nIGRzdEFscGhhKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0Is
IHNyY0FscGhhLCBkc3RBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZl
ckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xB
cnJheSogYXJyYXksIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCit7CisgICAgaWYgKCFhcnJheSB8fCAh
YXJyYXktPmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5idWZmZXJEYXRhKHRh
cmdldCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25n
IHRhcmdldCwgbG9uZyBvZmZzZXQsIFdlYkdMQXJyYXkqIGFycmF5KQoreworICAgIGlmICghYXJy
YXkgfHwgIWFycmF5LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YnVmZmVy
U3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VB
ZGRyZXNzKCkpOworfQorCit1bnNpZ25lZCBsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNoZWNr
RnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y2xlYXJDb2xvcihkb3VibGUgciwgZG91YmxlIGcsIGRvdWJsZSBiLCBkb3VibGUgYSkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQ2xlYXJDb2xv
cihzdGF0aWNfY2FzdDxmbG9hdD4ociksIHN0YXRpY19jYXN0PGZsb2F0PihnKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGIpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYSkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhcih1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENsZWFyKG1hc2spOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworI2lmIGRlZmluZWQoUVRfT1BFTkdM
X0VTXzIpCisgICAgZ2xDbGVhckRlcHRoZihkZXB0aCk7CisjZWxzZQorICAgIGdsQ2xlYXJEZXB0
aChkZXB0aCk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVu
Y2lsKGxvbmcgcykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIGdsQ2xlYXJTdGVuY2lsKHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQ29sb3JN
YXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFk
ZXIpOworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+Y29tcGlsZVNoYWRlcigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3Jk
ZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBib3JkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4
U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0
LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIGdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmN1bGxGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQ3VsbEZhY2UobW9kZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERlcHRoRnVuYyhm
dW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKGJvb2wgZmxhZykK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRGVw
dGhNYXNrKGZsYWcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKGRv
dWJsZSB6TmVhciwgZG91YmxlIHpGYXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIGdsRGVwdGhS
YW5nZWYoek5lYXIsIHpGYXIpOworI2Vsc2UKKyAgICBnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIp
OworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihXZWJH
TFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgQVNTRVJUKHBy
b2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGV0YWNoU2hhZGVyKChHTHVpbnQpIHBy
b2dyYW0tPm9iamVjdCgpLCAoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRGlzYWJsZShjYXApOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5z
aWduZWQgbG9uZyBpbmRleCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBt
b2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25n
IG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZz
ZXQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xFbmFibGUoY2FwKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRl
eCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZmluaXNoKCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIGdsRmluaXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmZsdXNoKCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIGdsRmx1c2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNo
bWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVy
KiBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1l
bnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyID8gKEdMdWludCkgYnVmZmVyLT5vYmplY3Qo
KSA6IDApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUy
RCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25l
ZCBsb25nIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBsb25nIGxldmVsKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRl
eHR1cmUgPyAoR0x1aW50KSB0ZXh0dXJlLT5vYmplY3QoKSA6IDAsIGxldmVsKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRnJvbnRGYWNl
KG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcCh1bnNp
Z25lZCBsb25nIHRhcmdldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Cit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dy
YW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFw
cm9ncmFtLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBHTGludCBtYXhMZW5ndGg7CisgICAgbV9p
bnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0
KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4
TGVuZ3RoKTsKKworICAgIEdMY2hhciBuYW1lW21heExlbmd0aF07IAorICAgIEdMc2l6ZWkgbmFt
ZUxlbmd0aDsKKyAgICBHTGludCBzaXplOworICAgIEdMZW51bSB0eXBlOworCisgICAgbV9pbnRl
cm5hbC0+Z2V0QWN0aXZlQXR0cmliKHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0
KCkpLCBpbmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsK
KworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5m
by5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7
CisgICAgaW5mby5zaXplID0gc2l6ZTsKKworICAgIHJldHVybiB0cnVlOworfQorICAgIAorYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dy
YW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFw
cm9ncmFtLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBHTGludCBtYXhMZW5ndGg7CisgICAgbV9p
bnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0
KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heExl
bmd0aCk7CisKKyAgICBHTGNoYXIgbmFtZVttYXhMZW5ndGhdOworICAgIEdMc2l6ZWkgbmFtZUxl
bmd0aDsKKyAgICBHTGludCBzaXplOworICAgIEdMZW51bSB0eXBlOworCisgICAgbV9pbnRlcm5h
bC0+Z2V0QWN0aXZlVW5pZm9ybShzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgp
KSwgaW5kZXgsIG1heExlbmd0aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisK
KyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluZm8u
bmFtZSA9IFN0cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOwor
ICAgIGluZm8uc2l6ZSA9IHNpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAt
MTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IHJldHVybiBtX2ludGVybmFsLT5nZXRBdHRyaWJMb2NhdGlvbigoR0x1aW50KSBwcm9ncmFtLT5v
YmplY3QoKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sKKyAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+bV9hdHRyczsKK30KKwordW5zaWduZWQgbG9uZyBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0RXJyb3IoKQoreworICAgIGlmIChtX2ludGVybmFsLT5tX3N5bnRoZXRp
Y0Vycm9ycy5zaXplKCkgPiAwKSB7CisgICAgICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+
OjppdGVyYXRvciBpdGVyID0gbV9pbnRlcm5hbC0+bV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsK
KyAgICAgICAgdW5zaWduZWQgbG9uZyBlcnIgPSAqaXRlcjsKKyAgICAgICAgbV9pbnRlcm5hbC0+
bV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOworICAgICAgICByZXR1cm4gZXJyOworICAg
IH0KKworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0
dXJuIGdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJp
bmcodW5zaWduZWQgbG9uZyBuYW1lKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgcmV0dXJuIFN0cmluZygoY29uc3QgY2hhciopIGdsR2V0U3RyaW5n
KG5hbWUpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGludCh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xIaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5pc0J1
ZmZlcigoR0x1aW50KSBidWZmZXItPm9iamVjdCgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6aXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsSXNFbmFibGVkKGNhcCk7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZl
ciogZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzRnJhbWVidWZmZXIoKEdMdWludCkgZnJhbWVidWZm
ZXItPm9iamVjdCgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIHJldHVybiBtX2ludGVybmFsLT5pc1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2Jq
ZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihXZWJH
TFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNSZW5kZXJidWZmZXIoKEdM
dWludCkgcmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5pc1NoYWRlcigoR0x1aW50KSBz
aGFkZXItPm9iamVjdCgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIHJldHVybiBnbElzVGV4dHVyZSgoR0x1aW50KSB0ZXh0dXJlLT5vYmplY3QoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChkb3VibGUgd2lkdGgpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbExpbmVX
aWR0aChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIEFTU0VSVChw
cm9ncmFtKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPmxpbmtQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFt
ZSwgbG9uZyBwYXJhbSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIGdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFBvbHln
b25PZmZzZXQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZhY3RvciksIHN0YXRpY19jYXN0PGZsb2F0Pih1
bml0cykpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpy
ZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBs
b25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIAorICAgIGlm
ICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFIHx8IGZvcm1hdCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAg
IFJlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBhcnJheSA9IFdlYkdMVW5zaWduZWRCeXRl
QXJyYXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgIGdsUmVhZFBpeGVscyh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIChHTHZvaWQqKSBhcnJheS0+ZGF0YSgpKTsK
KyAgICByZXR1cm4gYXJyYXk7ICAgIAorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxl
YXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3Zl
cmFnZShkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xTYW1wbGVDb3ZlcmFnZShzdGF0aWNfY2FzdDxm
bG9hdD4odmFsdWUpLCBpbnZlcnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzY2lz
c29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IGdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICAvLyBGb3JjZSB0byBHTFNMIDEuMDoKKyAgICAv
LyBodHRwczovL2N2cy5raHJvbm9zLm9yZy9zdm4vcmVwb3MvcmVnaXN0cnkvdHJ1bmsvcHVibGlj
L3dlYmdsL2RvYy9zcGVjL1dlYkdMLXNwZWMuaHRtbCM0LjQKKyAgICAvLyBGSVhNRTogTGluZXMg
YmVnaW5uaW5nIHdpdGggIiN2ZXJzaW9uIiBzaG91bGQgYmUgc3RyaXBwZWQgb3V0LgorCisgICAg
U3RyaW5nIHByZXBhcmVkOworICAgCisgICAgcHJlcGFyZWQuYXBwZW5kKCIjdmVyc2lvbiAxMDBc
biIpOworI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgcHJlcGFyZWQuYXBwZW5kKCJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIpOworI2VuZGlmCisgICAgcHJlcGFyZWQuYXBwZW5k
KHN0cmluZyk7CisKKyAgICBDU3RyaW5nIHByZXBhcmVkQ1MgPSBwcmVwYXJlZC51dGY4KCk7Cisg
ICAgY29uc3QgY2hhciogZGF0YSA9IHByZXBhcmVkQ1MuZGF0YSgpOworICAgIGludCBsZW5ndGgg
PSBwcmVwYXJlZC5sZW5ndGgoKTsKKyAgICBtX2ludGVybmFsLT5zaGFkZXJTb3VyY2UoKEdMdWlu
dCkgc2hhZGVyLT5vYmplY3QoKSwgMSwgJmRhdGEsICZsZW5ndGgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1
bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNl
LCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU3RlbmNpbE1h
c2sobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJh
dGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5zdGVuY2ls
TWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25l
ZCBsb25nIHpwYXNzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgZ2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNp
Z25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3Mp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgcG5hbWUsIGZsb2F0IHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHN0
YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0
ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCB2YWx1ZSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsVGV4
UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0
IHYwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+dW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9h
dCB2MSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPnVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogYXJyYXksIGlu
dCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YobG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAs
IGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2
Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlv
biwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zZnYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKGxvbmcg
bG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
dW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB2MCkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwt
PnVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5p
Zm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlm
b3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlm
b3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+dW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPnVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBp
bnQgdjIsIGludCB2MykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24s
IGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KGxv
bmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogYXJyYXksIGludCBzaXplKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRy
YW5zcG9zZSwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXg0ZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQo
cHJvZ3JhbSk7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT51c2VQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgCisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52YWxpZGF0
ZVByb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRl
cm5hbC0+dmVydGV4QXR0cmliMWYoaW5keCwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9h
dCB2MSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjJmKGluZHgsIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0
KiBhcnJheSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjJmdihpbmR4LCBhcnJheSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxv
YXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjNmKGluZHgsIHYw
LCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIzZnYo
aW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0
Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0
IHYzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+dmVydGV4QXR0cmliNGYoaW5keCwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxv
bmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGxv
bmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYlBvaW50
ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0
aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbFZpZXdwb3J0KHN0YXRpY19jYXN0PEdMaW50Pih4KSwgc3Rh
dGljX2Nhc3Q8R0xpbnQ+KHkpLCBzdGF0aWNfY2FzdDxHTHNpemVpPih3aWR0aCksIHN0YXRpY19j
YXN0PEdMc2l6ZWk+KGhlaWdodCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRC
b29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lLCB1bnNpZ25lZCBjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0Qm9vbGVh
bnYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVy
UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGlu
dCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25lZCBsb25n
IHBuYW1lLCBmbG9hdCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25n
IHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydih1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xH
ZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBp
bnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgp
LCBwbmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dy
YW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbGVuZ3RoOworICAgIG1faW50ZXJu
YWwtPmdldFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OklORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisKKyAgICBHTHNpemVpIHNpemU7CisK
KyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOworICAgIGlm
ICghaW5mbykKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3Jh
bUluZm9Mb2coKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8p
OworCisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZvKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1l
LCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihX
ZWJHTFNoYWRlciogc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQorewor
ICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVyaXYoKEdMdWludCkgc2hhZGVyLT5vYmpl
Y3QoKSwgcG5hbWUsIHZhbHVlKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
aGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50IGxlbmd0aDsKKyAgICBtX2ludGVy
bmFsLT5nZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBHcmFwaGljc0NvbnRl
eHQzRDo6SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAgIEdMc2l6ZWkgc2l6ZTsKKyAg
ICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOworICAgIGlmICgh
aW5mbykKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVySW5m
b0xvZygoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKKwor
ICAgIFN0cmluZyByZXN1bHQoaW5mbyk7CisgICAgZmFzdEZyZWUoaW5mbyk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJj
ZShXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisKKyAgICBHTGludCBsZW5ndGg7CisgICAgbV9pbnRlcm5hbC0+Z2V0U2hh
ZGVyaXYoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURF
Ul9TT1VSQ0VfTEVOR1RILCAmbGVuZ3RoKTsKKworICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICBHTGNo
YXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOworICAgIGlmICghaW5mbykK
KyAgICAgICAgcmV0dXJuICIiOworCisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVyU291cmNlKChH
THVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOworCisgICAgU3Ry
aW5nIHJlc3VsdChpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZvKTsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldFRleFBh
cmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVl
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VW5pZm9y
bWZ2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VW5pZm9ybWl2KChHTHVpbnQp
IHByb2dyYW0tPm9iamVjdCgpLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCitsb25nIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIAorICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwt
PmdldFVuaWZvcm1Mb2NhdGlvbigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmli
ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+Z2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRy
aWJpdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKworbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcg
cG5hbWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICAKKyAgICB2b2lkKiBwb2ludGVyOworICAgIG1faW50ZXJuYWwtPmdldFZlcnRleEF0dHJpYlBv
aW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGxvbmc+KHBvaW50ZXIpOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdl
MkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3Jt
YXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5z
aWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgZ2xUZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IEdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQoreworICAg
IEFTU0VSVChpbWFnZSk7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgR0x1aW50IGZv
cm1hdDsKKyAgICBHTHVpbnQgaW50ZXJuYWxGb3JtYXQ7CisKKyAgICBpZiAoIWV4dHJhY3RJbWFn
ZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJuYWxGb3JtYXQpKSB7CisgICAgICAg
IHFXYXJuaW5nKCkgPDwgIkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEOiBjb3VsZCBub3Qg
ZXh0cmFjdCBJbWFnZSBkYXRhIjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGds
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2UtPndpZHRoKCks
IGltYWdlLT5oZWlnaHQoKSwgCisgICAgICAgICAgICAgICAgIDAsIGZvcm1hdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOworCisgICAgcmV0dXJu
IDA7Cit9CisgICAgCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwg
dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25l
ZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgZ2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAg
ICByZXR1cm4gMDsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlv
ZmYsIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorewor
ICAgIEFTU0VSVChpbWFnZSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAg
IEdMdWludCBmb3JtYXQ7CisgICAgR0x1aW50IGludGVybmFsRm9ybWF0OworCisgICAgaWYgKCFl
eHRyYWN0SW1hZ2VEYXRhKGltYWdlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgaW1hZ2VEYXRh
LCAmZm9ybWF0LCAmaW50ZXJuYWxGb3JtYXQpKSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIkdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEOiBjb3VsZCBub3QgZXh0cmFjdCBJbWFnZSBk
YXRhIjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGdsVGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgp
LCAKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWdu
ZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBHTHVpbnQgaGFuZGxlOworICAgIG1faW50
ZXJuYWwtPmdlbkJ1ZmZlcnMoMSwgJmhhbmRsZSk7CisgICAgcmV0dXJuIGhhbmRsZTsKK30KKwor
dW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIEdMdWludCBoYW5kbGU7
CisgICAgbV9pbnRlcm5hbC0+Z2VuRnJhbWVidWZmZXJzKDEsICZoYW5kbGUpOworICAgIHJldHVy
biBoYW5kbGU7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFt
KCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJl
dHVybiBtX2ludGVybmFsLT5jcmVhdGVQcm9ncmFtKCk7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgR0x1aW50IGhhbmRsZTsKKyAgICBtX2ludGVybmFs
LT5nZW5SZW5kZXJidWZmZXJzKDEsICZoYW5kbGUpOworICAgIHJldHVybiBoYW5kbGU7Cit9CisK
K3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyB0
eXBlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
cmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIp
ID8gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUiA6IEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJURVhfU0hBREVSKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZVRleHR1cmUoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgR0x1aW50IGhhbmRsZTsKKyAgICBnbEdlblRleHR1cmVzKDEsICZoYW5kbGUpOworICAg
IHJldHVybiBoYW5kbGU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZl
cih1bnNpZ25lZCBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFt
ZWJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1faW50ZXJuYWwtPmRlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKHVuc2lnbmVkIHByb2dyYW0p
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkZWxldGVSZW5kZXJidWZmZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGVs
ZXRlUmVuZGVyYnVmZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlU2hhZGVyKHVuc2lnbmVkIHNoYWRlcikKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVNoYWRl
cihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKHVu
c2lnbmVkIHRleHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKK30KKworaW50IEdyYXBo
aWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyhpbnQgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKEdMYnl0ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToK
KyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTSE9SVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHNob3J0KTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihH
THVzaG9ydCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgorICAgICAgICByZXR1
cm4gc2l6ZW9mKEdMaW50KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9J
TlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGZsb2F0KTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogaGFzQWxwaGFDaGFubmVsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3AqIG5lZWRlZEFscGhh
T3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBm
b3JtYXQpCit7CisgICAgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQgPSAoIXByZW11bHRpcGx5
QWxwaGEpID8gCisgICAgICAgIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMiA6CisgICAgICAgIFFJbWFn
ZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOworIAorICAgIFFQaXhtYXAqIG5hdGl2ZVBp
eG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOyAKKworICAgICpoYXNB
bHBoYUNoYW5uZWwgPSB0cnVlOworICAgICpuZWVkZWRBbHBoYU9wID0ga0FscGhhRG9Ob3RoaW5n
OworICAgICpmb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKworICAgIFFJbWFnZSBu
YXRpdmVJbWFnZSA9IG5hdGl2ZVBpeG1hcC0+dG9JbWFnZSgpLmNvbnZlcnRUb0Zvcm1hdChpbWFn
ZUZvcm1hdCk7CisgICAgb3V0cHV0VmVjdG9yLmFwcGVuZChuYXRpdmVJbWFnZS5iaXRzKCksIG5h
dGl2ZUltYWdlLmJ5dGVDb3VudCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vi
c2V0dGluZ3MuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCmluZGV4IGQ2MGYw
OWMuLmU2ZmRmNjEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAor
KysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKQEAgLTE1OCw2ICsxNTgsMTMgQEAg
dm9pZCBRV2ViU2V0dGluZ3NQcml2YXRlOjphcHBseSgpCiAKICAgICAgICAgc2V0dGluZ3MtPnNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHZhbHVlKTsKICNlbmRpZgorI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCisgICAgICAgIHZhbHVlID0gYXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGlu
Z3M6OldlYkdMRW5hYmxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2Jh
bC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCkpOworCisgICAg
ICAgIHNldHRpbmdzLT5zZXRXZWJHTEVuYWJsZWQodmFsdWUpOworI2VuZGlmCisgCiAgICAgICAg
IHZhbHVlID0gYXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVu
V2luZG93cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLT5h
dHRyaWJ1dGVzLnZhbHVlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzKSk7
CiAgICAgICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNh
bGx5KHZhbHVlKTsKQEAgLTQwMSw2ICs0MDgsNyBAQCBRV2ViU2V0dGluZ3M6OlFXZWJTZXR0aW5n
cygpCiAgICAgZC0+YXR0cmlidXRlcy5pbnNlcnQoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRD
YW5BY2Nlc3NSZW1vdGVVcmxzLCBmYWxzZSk7CiAgICAgZC0+YXR0cmlidXRlcy5pbnNlcnQoUVdl
YlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NGaWxlVXJscywgdHJ1ZSk7CiAgICAgZC0+
YXR0cmlidXRlcy5pbnNlcnQoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZCwgZmFsc2UpOworICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6V2Vi
R0xFbmFibGVkLCBmYWxzZSk7CiAgICAgZC0+b2ZmbGluZVN0b3JhZ2VEZWZhdWx0UXVvdGEgPSA1
ICogMTAyNCAqIDEwMjQ7CiAgICAgZC0+ZGVmYXVsdFRleHRFbmNvZGluZyA9IFFMYXRpbjFTdHJp
bmcoImlzby04ODU5LTEiKTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRp
bmdzLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5oCmluZGV4IGIxZjVjZjIuLjI5YzAx
YjYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgKKysrIGIvV2ViS2l0
L3F0L0FwaS9xd2Vic2V0dGluZ3MuaApAQCAtNzAsNyArNzAsOCBAQCBwdWJsaWM6CiAgICAgICAg
IExvY2FsQ29udGVudENhbkFjY2Vzc0ZpbGVVcmxzLAogICAgICAgICBEbnNQcmVmZXRjaEVuYWJs
ZWQsCiAgICAgICAgIFhTU0F1ZGl0b3JFbmFibGVkLAotICAgICAgICBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRW5hYmxlZAorICAgICAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwKKyAg
ICAgICAgV2ViR0xFbmFibGVkCiAgICAgfTsKICAgICBlbnVtIFdlYkdyYXBoaWMgewogICAgICAg
ICBNaXNzaW5nSW1hZ2VHcmFwaGljLApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBi
L1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMmQxYTQ4My4uNDNiN2QwMyAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjAgQEAKKzIwMTAtMDItMjMgIEphcmtrbyBTYWtraW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0
by5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UXQgV2ViR0wgc3VwcG9ydAorCisgICAgICAgIEFkZHMgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBv
ZiBXZWJHTCBzdXBwb3J0IHRvIFFXZWJTZXR0aW5ncy4KKyAgICAgICAgQWRkcyAnLS13ZWJnbCcg
Y29tbWFuZC1saW5lIHBhcmFtZXRlciB0byBRR1ZMYXVuY2hlci4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MTUzCisKKyAgICAgICAgKiBBcGkvcXdl
YnNldHRpbmdzLmNwcDoKKyAgICAgICAgKFFXZWJTZXR0aW5nc1ByaXZhdGU6OmFwcGx5KToKKyAg
ICAgICAgKFFXZWJTZXR0aW5nczo6UVdlYlNldHRpbmdzKToKKyAgICAgICAgKiBBcGkvcXdlYnNl
dHRpbmdzLmg6CisgICAgICAgICogUUdWTGF1bmNoZXIvbWFpbi5jcHA6CisgICAgICAgIChtYWlu
KToKKwogMjAxMC0wMi0yMyAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
UUdWTGF1bmNoZXIvbWFpbi5jcHAgYi9XZWJLaXQvcXQvUUdWTGF1bmNoZXIvbWFpbi5jcHAKaW5k
ZXggNDQ4YjRiMC4uMzA3ZTExOCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1FHVkxhdW5jaGVyL21h
aW4uY3BwCisrKyBiL1dlYktpdC9xdC9RR1ZMYXVuY2hlci9tYWluLmNwcApAQCAtNTIxLDYgKzUy
MSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgdXJsID0gYXJn
cy5hdCgxKTsKICAgICBpZiAoYXJncy5jb250YWlucygiLS1jb21wb3NpdGluZyIpKQogICAgICAg
ICBRV2ViU2V0dGluZ3M6Omdsb2JhbFNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCB0cnVlKTsKKyAgICBpZiAoYXJncy5j
b250YWlucygiLS13ZWJnbCIpKQorICAgICAgICBRV2ViU2V0dGluZ3M6Omdsb2JhbFNldHRpbmdz
KCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgdHJ1ZSk7CiAKICAg
ICBNYWluV2luZG93KiB3aW5kb3cgPSBuZXcgTWFpbldpbmRvdzsKICAgICB3aW5kb3ctPmxvYWQo
dXJsKTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0No
YW5nZUxvZwppbmRleCBlMDY2NTE5Li4zMDkxOGEyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTAtMDItMjMgIEphcmtrbyBTYWtraW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXQgV2ViR0wg
c3VwcG9ydAorCisgICAgICAgIEFkZHMgdG9nZ2xpbmcgb2YgV2ViR0wgc3VwcG9ydCB0byBRdExh
dW5jaGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzUxNTMKKworICAgICAgICAqIFF0TGF1bmNoZXIvbWFpbi5jcHA6CisgICAgICAgIChMYXVuY2hl
cldpbmRvdzo6dG9nZ2xlV2ViR0wpOgorICAgICAgICAoTGF1bmNoZXJXaW5kb3c6OnNldHVwVUkp
OgorCiAyMDEwLTAyLTIzICBMYXN6bG8gR29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAgYi9XZWJLaXRUb29scy9R
dExhdW5jaGVyL21haW4uY3BwCmluZGV4IDEyMDNjZTcuLmNmOGE2OWEgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAKKysrIGIvV2ViS2l0VG9vbHMvUXRMYXVuY2hl
ci9tYWluLmNwcApAQCAtMTE2LDYgKzExNiw3IEBAIHByb3RlY3RlZCBzbG90czoKIAogICAgIHZv
aWQgc2V0VG91Y2hNb2NraW5nKGJvb2wgb24pOwogICAgIHZvaWQgdG9nZ2xlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZyhib29sIHRvZ2dsZSk7CisgICAgdm9pZCB0b2dnbGVXZWJHTChib29sIHRvZ2ds
ZSk7CiAgICAgdm9pZCBpbml0aWFsaXplVmlldyhib29sIHVzZUdyYXBoaWNzVmlldyA9IGZhbHNl
KTsKIAogcHVibGljIHNsb3RzOgpAQCAtNDQ1LDYgKzQ0NiwxMSBAQCB2b2lkIExhdW5jaGVyV2lu
ZG93Ojp0b2dnbGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGJvb2wgdG9nZ2xlKQogICAgIHBhZ2Uo
KS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0VuYWJsZWQsIHRvZ2dsZSk7CiB9CiAKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2ds
ZVdlYkdMKGJvb2wgdG9nZ2xlKQoreworICAgIHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmli
dXRlKFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkLCB0b2dnbGUpOworfQorCiB2b2lkIExhdW5j
aGVyV2luZG93Ojppbml0aWFsaXplVmlldyhib29sIHVzZUdyYXBoaWNzVmlldykKIHsKICAgICBk
ZWxldGUgbV92aWV3OwpAQCAtNTU0LDYgKzU2MCwxMCBAQCB2b2lkIExhdW5jaGVyV2luZG93Ojpz
ZXR1cFVJKCkKICAgICB0b2dnbGVHcmFwaGljc1ZpZXctPnNldENoZWNrYWJsZSh0cnVlKTsKICAg
ICB0b2dnbGVHcmFwaGljc1ZpZXctPnNldENoZWNrZWQoZmFsc2UpOwogCisgICAgUUFjdGlvbiog
dG9nZ2xlV2ViR0wgPSB0b29sc01lbnUtPmFkZEFjdGlvbigiVG9nZ2xlIFdlYkdMIiwgdGhpcywg
U0xPVCh0b2dnbGVXZWJHTChib29sKSkpOworICAgIHRvZ2dsZVdlYkdMLT5zZXRDaGVja2FibGUo
dHJ1ZSk7CisgICAgdG9nZ2xlV2ViR0wtPnNldENoZWNrZWQoZmFsc2UpOworCiAgICAgUUFjdGlv
biogdG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IGdyYXBoaWNzVmlld01lbnUtPmFkZEFj
dGlvbigiVG9nZ2xlIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nIiwgdGhpcywgU0xPVCh0b2dnbGVB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKGJvb2wpKSk7CiAgICAgdG9nZ2xlQWNjZWxlcmF0ZWRDb21w
b3NpdGluZy0+c2V0Q2hlY2thYmxlKHRydWUpOwogICAgIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmctPnNldENoZWNrZWQoZmFsc2UpOwo=
</data>
<flag name="review"
          id="32222"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49381</attachid>
            <date>2010-02-24 05:23:30 -0800</date>
            <delta_ts>2010-02-24 06:03:37 -0800</delta_ts>
            <desc>Qt WebGL support</desc>
            <filename>qt-webgl-support-9.diff</filename>
            <type>text/plain</type>
            <size>77492</size>
            <attacher name="Jarkko Sakkinen">jarkko.sakkinen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjA2ZGIxZS4uYTJmODBhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjkgQEAKKzIwMTAtMDItMjMgIEphcmtrbyBTYWtr
aW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXQgV2ViR0wgc3VwcG9ydAorCisgICAgICAgIEFk
ZHMgR3JhcGhpY3NDb250ZXh0M0QgUXRXZWJLaXQgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTE1MworCisgICAgICAgICog
V2ViQ29yZS5wcmk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6Z2V0UHJvY0FkZHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGlj
c0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVu
ZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2spOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpk
ZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2Fi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0Fy
cmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2gpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0J1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpw
aXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cG9seWdv
bk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNv
bXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZm
ZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVD
b3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2Npc3Nvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
M2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00Zik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRl
cmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hh
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisKIDIw
MTAtMDItMjMgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3Qg
cmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJpIGIvV2ViQ29yZS9XZWJD
b3JlLnByaQppbmRleCAyN2YxYmI2Li5mYzc5ZjhkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUucHJpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcmkKQEAgLTI4Nyw4ICsyODcsMTcgQEAgSURM
X0JJTkRJTkdTICs9IFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCiAgICAg
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogICAgIGh0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMQWN0
aXZlSW5mby5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlkbCBcCisgICAgaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaWRsIFwK
KyAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5pZGwgXAogICAgIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVy
LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmlkbCBcCisgICAgaHRtbC9j
YW52YXMvV2ViR0xUZXh0dXJlLmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9j
YXRpb24uaWRsIFwKICAgICBodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmlkbCBc
CiAgICAgaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmlkbCBcCiAgICAgaHRtbC9j
YW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaWRsIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGM2MjUyMjQuLjhjYzk2MWYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBy
bwpAQCAtMjY4NSw2ICsyNjg1LDg3IEBAIFNPVVJDRVMgKz0gXAogfQogfQogCitjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfM0RfQ0FOVkFTPTEpIHsKK1FUICs9IG9wZW5nbAorSEVBREVSUyArPSBc
CisJYmluZGluZ3MvanMvSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBcCisJYmluZGlu
Z3MvanMvSlNXZWJHTEFycmF5SGVscGVyLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJy
YXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVj
dG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJp
bmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMv
SlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNX
ZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdM
VW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuaCBcCisJaHRtbC9jYW52YXMvQ2FudmFzQ29u
dGV4dEF0dHJpYnV0ZXMuaCBcCisJaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmggXAorCWh0bWwv
Y2FudmFzL1dlYkdMQWN0aXZlSW5mby5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVy
LmggXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xCdWZm
ZXIuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0QXR0cmlidXRlcy5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuaCBc
CisJaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEdl
dEluZm8uaCBcCisJaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uaCBcCisJaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaCBcCisJaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggXAorCWh0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9X
ZWJHTFRleHR1cmUuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBcCisJ
aHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkSW50QXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJy
YXkuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCAKKworU09V
UkNFUyArPSBcCisJYmluZGluZ3MvanMvSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuY3Bw
IFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9K
U1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQnl0
ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1
Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcCBcCisJ
YmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9q
cy9KU1dlYkdMSW50QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q29u
c3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHAg
XAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCBc
CisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmlu
ZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRp
bmdzL2pzL0pTV2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMv
SlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMv
SlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAgXAorCWh0bWwvY2FudmFzL0NhbnZh
c0NvbnRleHRBdHRyaWJ1dGVzLmNwcCBcCisgICAgaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmNw
cCBcCisJaHRtbC9jYW52YXMvV2ViR0xBcnJheUJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dl
YkdMQXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAgXAorCWh0bWwvY2Fu
dmFzL1dlYkdMQnl0ZUFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5jcHAgXAorCWh0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTEdldEluZm8uY3Bw
IFwKKwlodG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwIFwKKwlodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHAgXAorCWh0bWwvY2Fu
dmFzL1dlYkdMVGV4dHVyZS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9u
LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAgXAorCWh0bWwv
Y2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcCBcCisKK30KKworCiBpbmNsdWRlKCQkUFdELy4uL1dlYktpdC9xdC9BcGkvaGVhZGVycy5w
cmkpCiBpbmNsdWRlKC4uL2luY2x1ZGUvUXRXZWJLaXQvY2xhc3NoZWFkZXJzLnByaSkKIEhFQURF
UlMgKz0gJCRXRUJLSVRfQVBJX0hFQURFUlMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAwYTQxZGM2Li5jZjFkZjcwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC00NCw2ICs0NCwxMyBA
QCB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7CiBjb25zdCAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBOdWxsUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCA9IDA7CiB0
eXBlZGVmIEdMdWludCBQbGF0Zm9ybTNET2JqZWN0OwogY29uc3QgUGxhdGZvcm0zRE9iamVjdCBO
dWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7CisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxR
dE9wZW5HTC9RdE9wZW5HTD4KKwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEOworY29uc3QgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgPSAwOwordHlwZWRlZiBpbnQgUGxhdGZvcm0zRE9iamVjdDsKK2NvbnN0IFBs
YXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3JtM0RPYmplY3QgPSAwOwogI2Vsc2UKIHR5cGVkZWYg
dm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsKIGNvbnN0ICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEID0gMDsKQEAgLTczLDcgKzgw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICAvLyBGSVhNRTogaWRlYWxs
eSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRmb3Jtcy4KLSNpZiBQTEFURk9STShDSFJP
TUlVTSkKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oUVQpCiAgICAgY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICNlbmRpZgogCkBAIC00MDksNiArNDE2LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0
OwogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OworI2Vs
aWYgUExBVEZPUk0oUVQpCisgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCgpOworICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3Jt
VGV4dHVyZSgpIGNvbnN0OwogI2Vsc2UKICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gTnVsbFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0Q7IH0KICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRl
eHR1cmUoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm0zRE9iamVjdDsgfQpAQCAtNzA0LDcg
KzcxNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZiAgICAgICAgCiAKICAgICAgICAg
Ly8gRklYTUU6IGlkZWFsbHkgdGhpcyB3b3VsZCBiZSB1c2VkIG9uIGFsbCBwbGF0Zm9ybXMuCi0j
aWYgUExBVEZPUk0oQ0hST01JVU0pCisjaWYgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JN
KFFUKQogICAgICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICAg
ICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+IG1faW50ZXJuYWw7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZTdhNmIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCkBAIC0wLDAgKzEsMTYyOCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTAgVGlldG8gQ29ycG9yYXRpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICAgICAKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ2FudmFzT2JqZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheS5oIgorI2lu
Y2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xGbG9hdEFycmF5LmgiCisjaW5j
bHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMSW50QXJyYXkuaCIKKyNp
bmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVy
LmgiCisjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEJ5
dGVBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCisjaWYgRU5BQkxFKDNE
X0NBTlZBUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIWRlZmluZWQoR0xjaGFyKQor
dHlwZWRlZiBjaGFyIEdMY2hhcjsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQVBJRU5UUlkpCisj
ZGVmaW5lIEFQSUVOVFJZCisjZW5kaWYKKwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xBY3Rp
dmVUZXh0dXJlVHlwZSkgKEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEF0dGFj
aFNoYWRlclR5cGUpIChHTHVpbnQsIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bEJpbmRBdHRyaWJMb2NhdGlvblR5cGUpIChHTHVpbnQsIEdMdWludCwgY29uc3QgY2hhciopOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCaW5kQnVmZmVyVHlwZSkgKEdMZW51bSwgR0x1aW50
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQmluZEZyYW1lYnVmZmVyVHlwZSkgKEdMZW51
bSwgR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQmluZFJlbmRlcmJ1ZmZlclR5
cGUpIChHTGVudW0sIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJsZW5kQ29s
b3JUeXBlKSAoR0xjbGFtcGYsIEdMY2xhbXBmLCBHTGNsYW1wZiwgR0xjbGFtcGYpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSogZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVUeXBlKShHTGVudW0sIEdM
ZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJsZW5kRnVuY1NlcGFyYXRlVHlwZSko
R0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0
QWxwaGEpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCdWZmZXJEYXRhVHlwZSkgKEdMZW51
bSwgR0xzaXplaXB0ciwgY29uc3QgR0x2b2lkKiwgR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsQnVmZmVyU3ViRGF0YVR5cGUpIChHTGVudW0sIEdMaW50cHRyLCBHTHNpemVpcHRy
LCBjb25zdCBHTHZvaWQqKTsKK3R5cGVkZWYgR0xlbnVtIChBUElFTlRSWSogZ2xDaGVja0ZyYW1l
YnVmZmVyU3RhdHVzVHlwZSkgKEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbENv
bXBpbGVTaGFkZXJUeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgR0x1aW50IChBUElFTlRSWSogZ2xD
cmVhdGVQcm9ncmFtVHlwZSkgKCk7Cit0eXBlZGVmIEdMdWludCAoQVBJRU5UUlkqIGdsQ3JlYXRl
U2hhZGVyVHlwZSkgKEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERlbGV0ZUJ1
ZmZlcnNUeXBlKSAoR0xzaXplaSwgY29uc3QgR0x1aW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZKiBnbERlbGV0ZUZyYW1lYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCop
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xEZWxldGVQcm9ncmFtVHlwZSkgKEdMdWludCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlKSAoR0xz
aXplaSBuLCBjb25zdCBHTHVpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsRGVsZXRl
U2hhZGVyVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERldGFjaFNo
YWRlclR5cGUpIChHTHVpbnQsIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSogZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2
b2lkIChBUElFTlRSWSogZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlclR5cGUpIChHTGVudW0sIEdM
ZW51bSwgR0xlbnVtLCBHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRFR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xlbnVtLCBHTHVpbnQsIEdMaW50
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2VuQnVmZmVyc1R5cGUpIChHTHNpemVpLCBH
THVpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2VuZXJhdGVNaXBtYXBUeXBlKSAo
R0xlbnVtIHRhcmdldCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdlbkZyYW1lYnVmZmVy
c1R5cGUpIChHTHNpemVpLCBHTHVpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2Vu
UmVuZGVyYnVmZmVyc1R5cGUpIChHTHNpemVpLCBHTHVpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsR2V0QWN0aXZlQXR0cmliVHlwZSkgKEdMdWludCwgR0x1aW50LCBHTHNpemVpLCBH
THNpemVpKiwgR0xpbnQqLCBHTGVudW0qLCBHTGNoYXIqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkqIGdsR2V0QWN0aXZlVW5pZm9ybVR5cGUpIChHTHVpbnQsIEdMdWludCwgR0xzaXplaSwgR0xz
aXplaSosIEdMaW50KiwgR0xlbnVtKiwgR0xjaGFyKik7Cit0eXBlZGVmIEdMaW50IChBUElFTlRS
WSogZ2xHZXRBdHRyaWJMb2NhdGlvblR5cGUpIChHTHVpbnQsIGNvbnN0IGNoYXIqKTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXZUeXBlKSAoR0xlbnVtLCBH
TGVudW0sIEdMaW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2VHlwZSkgKEdMZW51bSwgR0xlbnVtLCBHTGVudW0sIEdMaW50
KiBwYXJhbXMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRQcm9ncmFtSW5mb0xvZ1R5
cGUpIChHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkqLCBjaGFyKik7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZKiBnbEdldFByb2dyYW1pdlR5cGUpIChHTHVpbnQsIEdMZW51bSwgR0xpbnQqKTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZUeXBlKSAo
R0xlbnVtLCBHTGVudW0sIEdMaW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldFNo
YWRlckluZm9Mb2dUeXBlKSAoR0x1aW50LCBHTHNpemVpLCBHTHNpemVpKiwgY2hhciopOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRTaGFkZXJpdlR5cGUpIChHTHVpbnQsIEdMZW51bSwg
R0xpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0U2hhZGVyU291cmNlVHlwZSkg
KEdMdWludCwgR0xzaXplaSwgR0xzaXplaSosIGNoYXIqKTsKK3R5cGVkZWYgR0xpbnQgKEFQSUVO
VFJZKiBnbEdldFVuaWZvcm1Mb2NhdGlvblR5cGUpIChHTHVpbnQsIGNvbnN0IGNoYXIqKTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0VW5pZm9ybWZ2VHlwZSkgKEdMdWludCwgR0xpbnQs
IEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0VW5pZm9ybWl2VHlwZSkg
KEdMdWludCwgR0xpbnQsIEdMaW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldFZl
cnRleEF0dHJpYmZ2VHlwZSkgKEdMdWludCwgR0xlbnVtLCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZKiBnbEdldFZlcnRleEF0dHJpYml2VHlwZSkgKEdMdWludCwgR0xlbnVtLCBH
TGludCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVy
dlR5cGUpIChHTHVpbnQsIEdMZW51bSwgR0x2b2lkKiopOwordHlwZWRlZiBHTGJvb2xlYW4gKEFQ
SUVOVFJZKiBnbElzQnVmZmVyVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJ
RU5UUlkqIGdsSXNGcmFtZWJ1ZmZlclR5cGUpIChHTHVpbnQpOwordHlwZWRlZiBHTGJvb2xlYW4g
KEFQSUVOVFJZKiBnbElzUHJvZ3JhbVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiBHTGJvb2xlYW4g
KEFQSUVOVFJZKiBnbElzUmVuZGVyYnVmZmVyVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIEdMYm9v
bGVhbiAoQVBJRU5UUlkqIGdsSXNTaGFkZXJUeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkqIGdsTGlua1Byb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsUmVuZGVyYnVmZmVyU3RvcmFnZVR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xzaXpl
aSwgR0xzaXplaSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFNoYWRlclNvdXJjZVR5cGUp
IChHTHVpbnQsIEdMc2l6ZWksIGNvbnN0IGNoYXIqKiwgY29uc3QgR0xpbnQqKTsKK3R5cGVkZWYg
dm9pZCAoQVBJRU5UUlkqIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZVR5cGUpIChHTGVudW0sIEdMZW51
bSwgR0xpbnQsIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFN0ZW5jaWxNYXNr
U2VwYXJhdGVUeXBlKSAoR0xlbnVtLCBHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xTdGVuY2lsT3BTZXBhcmF0ZVR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xlbnVtLCBHTGVudW0p
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMWZUeXBlKSAoR0xpbnQsIEdMZmxv
YXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMWZ2VHlwZSkgKEdMaW50LCBH
THNpemVpLCBjb25zdCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZv
cm0xaVR5cGUpIChHTGludCwgR0xpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlm
b3JtMWl2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGludCopOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSogZ2xVbmlmb3JtMmZUeXBlKSAoR0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQpOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMmZ2VHlwZSkgKEdMaW50LCBHTHNpemVp
LCBjb25zdCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0yaVR5
cGUpIChHTGludCwgR0xpbnQsIEdMaW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5p
Zm9ybTJpdlR5cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xpbnQqKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTNmVHlwZSkgKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBH
TGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTNmdlR5cGUpIChHTGlu
dCwgR0xzaXplaSwgY29uc3QgR0xmbG9hdCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xV
bmlmb3JtM2lUeXBlKSAoR0xpbnQsIEdMaW50LCBHTGludCwgR0xpbnQpOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSogZ2xVbmlmb3JtM2l2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGlu
dCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtNGZUeXBlKSAoR0xpbnQsIEdM
ZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSogZ2xVbmlmb3JtNGZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0Kik7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm00aVR5cGUpIChHTGludCwgR0xpbnQsIEdM
aW50LCBHTGludCwgR0xpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtNGl2
VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGludCopOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSogZ2xVbmlmb3JtTWF0cml4MmZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4s
IGNvbnN0IEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybU1hdHJp
eDNmdlR5cGUpIChHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0Kik7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm1NYXRyaXg0ZnZUeXBlKSAoR0xpbnQsIEdM
c2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCopOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSogZ2xVc2VQcm9ncmFtVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bFZhbGlkYXRlUHJvZ3JhbVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xWZXJ0ZXhBdHRyaWIxZlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQpOwordHlwZWRlZiB2
b2lkIChBUElFTlRSWSogZ2xWZXJ0ZXhBdHRyaWIxZnZUeXBlKSAoR0x1aW50LCBjb25zdCBHTGZs
b2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjJmVHlwZSkgKEdM
dWludCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZKiBnbFZlcnRleEF0dHJpYjJmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQqKTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVmVydGV4QXR0cmliM2ZUeXBlKSAoR0x1aW50LCBjb25z
dCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkqIGdsVmVydGV4QXR0cmliM2Z2VHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCop
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xWZXJ0ZXhBdHRyaWI0ZlR5cGUpIChHTHVpbnQs
IGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxv
YXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xWZXJ0ZXhBdHRyaWI0ZnZUeXBlKSAoR0x1
aW50LCBjb25zdCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0
dHJpYlBvaW50ZXJUeXBlKSAoR0x1aW50LCBHTGludCwgR0xlbnVtLCBHTGJvb2xlYW4sIEdMc2l6
ZWksIGNvbnN0IEdMdm9pZCopOworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsK
K3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOwor
CisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gbV92YWxpZDsgfQorCisgICAgZ2xBY3RpdmVU
ZXh0dXJlVHlwZSBhY3RpdmVUZXh0dXJlOworICAgIGdsQXR0YWNoU2hhZGVyVHlwZSBhdHRhY2hT
aGFkZXI7CisgICAgZ2xCaW5kQXR0cmliTG9jYXRpb25UeXBlIGJpbmRBdHRyaWJMb2NhdGlvbjsK
KyAgICBnbEJpbmRCdWZmZXJUeXBlIGJpbmRCdWZmZXI7CisgICAgZ2xCaW5kRnJhbWVidWZmZXJU
eXBlIGJpbmRGcmFtZWJ1ZmZlcjsKKyAgICBnbEJpbmRSZW5kZXJidWZmZXJUeXBlIGJpbmRSZW5k
ZXJidWZmZXI7CisgICAgZ2xCbGVuZENvbG9yVHlwZSBibGVuZENvbG9yOworICAgIGdsQmxlbmRF
cXVhdGlvblNlcGFyYXRlVHlwZSBibGVuZEVxdWF0aW9uU2VwYXJhdGU7CisgICAgZ2xCbGVuZEZ1
bmNTZXBhcmF0ZVR5cGUgYmxlbmRGdW5jU2VwYXJhdGU7CisgICAgZ2xCdWZmZXJEYXRhVHlwZSBi
dWZmZXJEYXRhOworICAgIGdsQnVmZmVyU3ViRGF0YVR5cGUgYnVmZmVyU3ViRGF0YTsKKyAgICBn
bENoZWNrRnJhbWVidWZmZXJTdGF0dXNUeXBlIGNoZWNrRnJhbWVidWZmZXJTdGF0dXM7CisgICAg
Z2xDb21waWxlU2hhZGVyVHlwZSBjb21waWxlU2hhZGVyOworICAgIGdsQ3JlYXRlUHJvZ3JhbVR5
cGUgY3JlYXRlUHJvZ3JhbTsKKyAgICBnbENyZWF0ZVNoYWRlclR5cGUgY3JlYXRlU2hhZGVyOwor
ICAgIGdsRGVsZXRlQnVmZmVyc1R5cGUgZGVsZXRlQnVmZmVyczsKKyAgICBnbERlbGV0ZUZyYW1l
YnVmZmVyc1R5cGUgZGVsZXRlRnJhbWVidWZmZXJzOworICAgIGdsRGVsZXRlUHJvZ3JhbVR5cGUg
ZGVsZXRlUHJvZ3JhbTsKKyAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlIGRlbGV0ZVJlbmRl
cmJ1ZmZlcnM7CisgICAgZ2xEZWxldGVTaGFkZXJUeXBlIGRlbGV0ZVNoYWRlcjsKKyAgICBnbERl
dGFjaFNoYWRlclR5cGUgZGV0YWNoU2hhZGVyOworICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5VHlwZSBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXk7CisgICAgZ2xFbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheVR5cGUgZW5hYmxlVmVydGV4QXR0cmliQXJyYXk7CisgICAgZ2xGcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlclR5cGUgZnJhbWVidWZmZXJSZW5kZXJidWZmZXI7CisgICAgZ2xGcmFtZWJ1ZmZl
clRleHR1cmUyRFR5cGUgZnJhbWVidWZmZXJUZXh0dXJlMkQ7CisgICAgZ2xHZW5CdWZmZXJzVHlw
ZSBnZW5CdWZmZXJzOworICAgIGdsR2VuZXJhdGVNaXBtYXBUeXBlIGdlbmVyYXRlTWlwbWFwOwor
ICAgIGdsR2VuRnJhbWVidWZmZXJzVHlwZSBnZW5GcmFtZWJ1ZmZlcnM7CisgICAgZ2xHZW5SZW5k
ZXJidWZmZXJzVHlwZSBnZW5SZW5kZXJidWZmZXJzOworICAgIGdsR2V0QWN0aXZlQXR0cmliVHlw
ZSBnZXRBY3RpdmVBdHRyaWI7CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtVHlwZSBnZXRBY3RpdmVV
bmlmb3JtOworICAgIGdsR2V0QXR0cmliTG9jYXRpb25UeXBlIGdldEF0dHJpYkxvY2F0aW9uOwor
ICAgIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXZUeXBlIGdldEJ1ZmZlclBhcmFtZXRlcml2OworICAg
IGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZUeXBlIGdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2OworICAgIGdsR2V0UHJvZ3JhbUluZm9Mb2dUeXBlIGdldFBy
b2dyYW1JbmZvTG9nOworICAgIGdsR2V0UHJvZ3JhbWl2VHlwZSBnZXRQcm9ncmFtaXY7CisgICAg
Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlR5cGUgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
aXY7CisgICAgZ2xHZXRTaGFkZXJJbmZvTG9nVHlwZSBnZXRTaGFkZXJJbmZvTG9nOworICAgIGds
R2V0U2hhZGVyaXZUeXBlIGdldFNoYWRlcml2OworICAgIGdsR2V0U2hhZGVyU291cmNlVHlwZSBn
ZXRTaGFkZXJTb3VyY2U7CisgICAgZ2xHZXRVbmlmb3JtZnZUeXBlIGdldFVuaWZvcm1mdjsKKyAg
ICBnbEdldFVuaWZvcm1pdlR5cGUgZ2V0VW5pZm9ybWl2OworICAgIGdsR2V0VW5pZm9ybUxvY2F0
aW9uVHlwZSBnZXRVbmlmb3JtTG9jYXRpb247CisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJmdlR5cGUg
Z2V0VmVydGV4QXR0cmliZnY7CisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdlR5cGUgZ2V0VmVydGV4
QXR0cmliaXY7CisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydlR5cGUgZ2V0VmVydGV4QXR0
cmliUG9pbnRlcnY7CisgICAgZ2xJc0J1ZmZlclR5cGUgaXNCdWZmZXI7CisgICAgZ2xJc0ZyYW1l
YnVmZmVyVHlwZSBpc0ZyYW1lYnVmZmVyOworICAgIGdsSXNQcm9ncmFtVHlwZSBpc1Byb2dyYW07
CisgICAgZ2xJc1JlbmRlcmJ1ZmZlclR5cGUgaXNSZW5kZXJidWZmZXI7CisgICAgZ2xJc1NoYWRl
clR5cGUgaXNTaGFkZXI7CisgICAgZ2xMaW5rUHJvZ3JhbVR5cGUgbGlua1Byb2dyYW07CisgICAg
Z2xSZW5kZXJidWZmZXJTdG9yYWdlVHlwZSByZW5kZXJidWZmZXJTdG9yYWdlOworICAgIGdsU2hh
ZGVyU291cmNlVHlwZSBzaGFkZXJTb3VyY2U7CisgICAgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlVHlw
ZSBzdGVuY2lsRnVuY1NlcGFyYXRlOworICAgIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZVR5cGUgc3Rl
bmNpbE1hc2tTZXBhcmF0ZTsKKyAgICBnbFN0ZW5jaWxPcFNlcGFyYXRlVHlwZSBzdGVuY2lsT3BT
ZXBhcmF0ZTsKKyAgICBnbFVuaWZvcm0xZlR5cGUgdW5pZm9ybTFmOworICAgIGdsVW5pZm9ybTFm
dlR5cGUgdW5pZm9ybTFmdjsKKyAgICBnbFVuaWZvcm0xaVR5cGUgdW5pZm9ybTFpOworICAgIGds
VW5pZm9ybTFpdlR5cGUgdW5pZm9ybTFpdjsKKyAgICBnbFVuaWZvcm0yZlR5cGUgdW5pZm9ybTJm
OworICAgIGdsVW5pZm9ybTJmdlR5cGUgdW5pZm9ybTJmdjsKKyAgICBnbFVuaWZvcm0yaVR5cGUg
dW5pZm9ybTJpOworICAgIGdsVW5pZm9ybTJpdlR5cGUgdW5pZm9ybTJpdjsKKyAgICBnbFVuaWZv
cm0zZlR5cGUgdW5pZm9ybTNmOworICAgIGdsVW5pZm9ybTNmdlR5cGUgdW5pZm9ybTNmdjsKKyAg
ICBnbFVuaWZvcm0zaVR5cGUgdW5pZm9ybTNpOworICAgIGdsVW5pZm9ybTNpdlR5cGUgdW5pZm9y
bTNpdjsKKyAgICBnbFVuaWZvcm00ZlR5cGUgdW5pZm9ybTRmOworICAgIGdsVW5pZm9ybTRmdlR5
cGUgdW5pZm9ybTRmdjsKKyAgICBnbFVuaWZvcm00aVR5cGUgdW5pZm9ybTRpOworICAgIGdsVW5p
Zm9ybTRpdlR5cGUgdW5pZm9ybTRpdjsKKyAgICBnbFVuaWZvcm1NYXRyaXgyZnZUeXBlIHVuaWZv
cm1NYXRyaXgyZnY7CisgICAgZ2xVbmlmb3JtTWF0cml4M2Z2VHlwZSB1bmlmb3JtTWF0cml4M2Z2
OworICAgIGdsVW5pZm9ybU1hdHJpeDRmdlR5cGUgdW5pZm9ybU1hdHJpeDRmdjsKKyAgICBnbFVz
ZVByb2dyYW1UeXBlIHVzZVByb2dyYW07CisgICAgZ2xWYWxpZGF0ZVByb2dyYW1UeXBlIHZhbGlk
YXRlUHJvZ3JhbTsKKyAgICBnbFZlcnRleEF0dHJpYjFmVHlwZSB2ZXJ0ZXhBdHRyaWIxZjsKKyAg
ICBnbFZlcnRleEF0dHJpYjFmdlR5cGUgdmVydGV4QXR0cmliMWZ2OworICAgIGdsVmVydGV4QXR0
cmliMmZUeXBlIHZlcnRleEF0dHJpYjJmOworICAgIGdsVmVydGV4QXR0cmliMmZ2VHlwZSB2ZXJ0
ZXhBdHRyaWIyZnY7CisgICAgZ2xWZXJ0ZXhBdHRyaWIzZlR5cGUgdmVydGV4QXR0cmliM2Y7Cisg
ICAgZ2xWZXJ0ZXhBdHRyaWIzZnZUeXBlIHZlcnRleEF0dHJpYjNmdjsKKyAgICBnbFZlcnRleEF0
dHJpYjRmVHlwZSB2ZXJ0ZXhBdHRyaWI0ZjsKKyAgICBnbFZlcnRleEF0dHJpYjRmdlR5cGUgdmVy
dGV4QXR0cmliNGZ2OworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlclR5cGUgdmVydGV4QXR0cmli
UG9pbnRlcjsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cnM7Cisg
ICAgUUdMV2lkZ2V0KiBtX2dsV2lkZ2V0OworICAgIEdMdWludCBtX3RleHR1cmU7CisgICAgR0x1
aW50IG1fbWFpbkZibzsKKyAgICBHTHVpbnQgbV9jdXJyZW50RmJvOworICAgIEdMdWludCBtX2Rl
cHRoQnVmZmVyOworICAgIFFJbWFnZSBtX3BpeGVsczsKKyAgICBMaXN0SGFzaFNldDx1bnNpZ25l
ZCBsb25nPiBtX3N5bnRoZXRpY0Vycm9yczsKKworcHJpdmF0ZToKKworICAgIHZvaWQqIGdldFBy
b2NBZGRyZXNzKGNvbnN0IFN0cmluZyYgcHJvYyk7CisgICAgYm9vbCBtX3ZhbGlkOworfTsKKwor
I2lmIGRlZmluZWQgKFFUX09QRU5HTF9FU18yKSAKKyNkZWZpbmUgR0VUX1BST0NfQUREUkVTUyhQ
cm9jKSBQcm9jCisjZWxzZQorI2RlZmluZSBHRVRfUFJPQ19BRERSRVNTKFByb2MpIHJlaW50ZXJw
cmV0X2Nhc3Q8UHJvYyMjVHlwZT4oZ2V0UHJvY0FkZHJlc3MoI1Byb2MpKTsKKyNlbmRpZgorIAor
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKKyAgICA6IG1fYXR0cnMoYXR0cnMpCisg
ICAgLCBtX2dsV2lkZ2V0KDApCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1fbWFpbkZibygw
KQorICAgICwgbV9jdXJyZW50RmJvKDApCisgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBt
X3ZhbGlkKHRydWUpCit7CisgICAgbV9hdHRycy5hbHBoYSA9IHRydWU7CisgICAgbV9hdHRycy5k
ZXB0aCA9IHRydWU7CisgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgbV9hdHRycy5h
bnRpYWxpYXMgPSBmYWxzZTsKKyAgICBtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7
CisKKyAgICBRR0xGb3JtYXQgZm9ybWF0OworCisgICAgZm9ybWF0LnNldERlcHRoKHRydWUpOwor
ICAgIGZvcm1hdC5zZXRTYW1wbGVCdWZmZXJzKHRydWUpOworICAgIGZvcm1hdC5zZXRTdGVuY2ls
KGZhbHNlKTsKKworICAgIG1fZ2xXaWRnZXQgPSBuZXcgUUdMV2lkZ2V0KGZvcm1hdCk7CisgICAg
aWYgKCFtX2dsV2lkZ2V0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJHcmFwaGlj
c0NvbnRleHQzRDogUUdMV2lkZ2V0IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBjb250ZXh0Iik7Cisg
ICAgICAgIG1fdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBjb25zdCBRR0xDb250ZXh0KiBjdHggPSBt
X2dsV2lkZ2V0LT5jb250ZXh0KCk7CisKKyAgICBhY3RpdmVUZXh0dXJlID0gR0VUX1BST0NfQURE
UkVTUyhnbEFjdGl2ZVRleHR1cmUpOworICAgIGF0dGFjaFNoYWRlciA9IEdFVF9QUk9DX0FERFJF
U1MoZ2xBdHRhY2hTaGFkZXIpOworICAgIGJpbmRBdHRyaWJMb2NhdGlvbiA9IEdFVF9QUk9DX0FE
RFJFU1MoZ2xCaW5kQXR0cmliTG9jYXRpb24pOworICAgIGJpbmRCdWZmZXIgPSBHRVRfUFJPQ19B
RERSRVNTKGdsQmluZEJ1ZmZlcik7CisgICAgYmluZEZyYW1lYnVmZmVyID0gR0VUX1BST0NfQURE
UkVTUyhnbEJpbmRGcmFtZWJ1ZmZlcik7CisgICAgYmluZFJlbmRlcmJ1ZmZlciA9IEdFVF9QUk9D
X0FERFJFU1MoZ2xCaW5kUmVuZGVyYnVmZmVyKTsKKyAgICBibGVuZENvbG9yID0gR0VUX1BST0Nf
QUREUkVTUyhnbEJsZW5kQ29sb3IpOworICAgIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSA9IEdFVF9Q
Uk9DX0FERFJFU1MoZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUpOworICAgIGJsZW5kRnVuY1NlcGFy
YXRlID0gR0VUX1BST0NfQUREUkVTUyhnbEJsZW5kRnVuY1NlcGFyYXRlKTsKKyAgICBidWZmZXJE
YXRhID0gR0VUX1BST0NfQUREUkVTUyhnbEJ1ZmZlckRhdGEpOworICAgIGJ1ZmZlclN1YkRhdGEg
PSBHRVRfUFJPQ19BRERSRVNTKGdsQnVmZmVyU3ViRGF0YSk7CisgICAgY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyA9IEdFVF9QUk9DX0FERFJFU1MoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKTsKKyAg
ICBjb21waWxlU2hhZGVyID0gR0VUX1BST0NfQUREUkVTUyhnbENvbXBpbGVTaGFkZXIpOworICAg
IGNyZWF0ZVByb2dyYW0gPSBHRVRfUFJPQ19BRERSRVNTKGdsQ3JlYXRlUHJvZ3JhbSk7CisgICAg
Y3JlYXRlU2hhZGVyID0gR0VUX1BST0NfQUREUkVTUyhnbENyZWF0ZVNoYWRlcik7CisgICAgZGVs
ZXRlQnVmZmVycyA9IEdFVF9QUk9DX0FERFJFU1MoZ2xEZWxldGVCdWZmZXJzKTsKKyAgICBkZWxl
dGVGcmFtZWJ1ZmZlcnMgPSBHRVRfUFJPQ19BRERSRVNTKGdsRGVsZXRlRnJhbWVidWZmZXJzKTsK
KyAgICBkZWxldGVQcm9ncmFtID0gR0VUX1BST0NfQUREUkVTUyhnbERlbGV0ZVByb2dyYW0pOwor
ICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcnMgPSBHRVRfUFJPQ19BRERSRVNTKGdsRGVsZXRlUmVuZGVy
YnVmZmVycyk7CisgICAgZGVsZXRlU2hhZGVyID0gR0VUX1BST0NfQUREUkVTUyhnbERlbGV0ZVNo
YWRlcik7CisgICAgZGV0YWNoU2hhZGVyID0gR0VUX1BST0NfQUREUkVTUyhnbERldGFjaFNoYWRl
cik7CisgICAgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ID0gR0VUX1BST0NfQUREUkVTUyhnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk7CisgICAgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkgPSBH
RVRfUFJPQ19BRERSRVNTKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOworICAgIGZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyID0gR0VUX1BST0NfQUREUkVTUyhnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKTsKKyAgICBmcmFtZWJ1ZmZlclRleHR1cmUyRCA9IEdFVF9QUk9DX0FERFJFU1MoZ2xGcmFt
ZWJ1ZmZlclRleHR1cmUyRCk7CisgICAgZ2VuQnVmZmVycyA9IEdFVF9QUk9DX0FERFJFU1MoZ2xH
ZW5CdWZmZXJzKTsKKyAgICBnZW5lcmF0ZU1pcG1hcCA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZW5l
cmF0ZU1pcG1hcCk7CisgICAgZ2VuRnJhbWVidWZmZXJzID0gR0VUX1BST0NfQUREUkVTUyhnbEdl
bkZyYW1lYnVmZmVycyk7CisgICAgZ2VuUmVuZGVyYnVmZmVycyA9IEdFVF9QUk9DX0FERFJFU1Mo
Z2xHZW5SZW5kZXJidWZmZXJzKTsKKyAgICBnZXRBY3RpdmVBdHRyaWIgPSBHRVRfUFJPQ19BRERS
RVNTKGdsR2V0QWN0aXZlQXR0cmliKTsKKyAgICBnZXRBY3RpdmVVbmlmb3JtID0gR0VUX1BST0Nf
QUREUkVTUyhnbEdldEFjdGl2ZVVuaWZvcm0pOworICAgIGdldEF0dHJpYkxvY2F0aW9uID0gR0VU
X1BST0NfQUREUkVTUyhnbEdldEF0dHJpYkxvY2F0aW9uKTsKKyAgICBnZXRCdWZmZXJQYXJhbWV0
ZXJpdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdik7CisgICAgZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOworICAgIGdldFByb2dyYW1JbmZvTG9n
ID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFByb2dyYW1JbmZvTG9nKTsKKyAgICBnZXRQcm9ncmFt
aXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0UHJvZ3JhbWl2KTsKKyAgICBnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXJpdik7CisgICAgZ2V0U2hhZGVySW5mb0xvZyA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRTaGFk
ZXJJbmZvTG9nKTsKKyAgICBnZXRTaGFkZXJpdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRTaGFk
ZXJpdik7CisgICAgZ2V0U2hhZGVyU291cmNlID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFNoYWRl
clNvdXJjZSk7CisgICAgZ2V0VW5pZm9ybWZ2ID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFVuaWZv
cm1mdik7CisgICAgZ2V0VW5pZm9ybWl2ID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFVuaWZvcm1p
dik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFVuaWZv
cm1Mb2NhdGlvbik7CisgICAgZ2V0VmVydGV4QXR0cmliZnYgPSBHRVRfUFJPQ19BRERSRVNTKGds
R2V0VmVydGV4QXR0cmliZnYpOworICAgIGdldFZlcnRleEF0dHJpYml2ID0gR0VUX1BST0NfQURE
UkVTUyhnbEdldFZlcnRleEF0dHJpYml2KTsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJQb2ludGVydiA9
IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydik7CisgICAgaXNCdWZm
ZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsSXNCdWZmZXIpOworICAgIGlzRnJhbWVidWZmZXIgPSBH
RVRfUFJPQ19BRERSRVNTKGdsSXNGcmFtZWJ1ZmZlcik7CisgICAgaXNQcm9ncmFtID0gR0VUX1BS
T0NfQUREUkVTUyhnbElzUHJvZ3JhbSk7CisgICAgaXNSZW5kZXJidWZmZXIgPSBHRVRfUFJPQ19B
RERSRVNTKGdsSXNSZW5kZXJidWZmZXIpOworICAgIGlzU2hhZGVyID0gR0VUX1BST0NfQUREUkVT
UyhnbElzU2hhZGVyKTsKKyAgICBsaW5rUHJvZ3JhbSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xMaW5r
UHJvZ3JhbSk7CisgICAgcmVuZGVyYnVmZmVyU3RvcmFnZSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlKTsKKyAgICBzaGFkZXJTb3VyY2UgPSBHRVRfUFJPQ19BRERSRVNT
KGdsU2hhZGVyU291cmNlKTsKKyAgICBzdGVuY2lsRnVuY1NlcGFyYXRlID0gR0VUX1BST0NfQURE
UkVTUyhnbFN0ZW5jaWxGdW5jU2VwYXJhdGUpOworICAgIHN0ZW5jaWxNYXNrU2VwYXJhdGUgPSBH
RVRfUFJPQ19BRERSRVNTKGdsU3RlbmNpbE1hc2tTZXBhcmF0ZSk7CisgICAgc3RlbmNpbE9wU2Vw
YXJhdGUgPSBHRVRfUFJPQ19BRERSRVNTKGdsU3RlbmNpbE9wU2VwYXJhdGUpOworICAgIHVuaWZv
cm0xZiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtMWYpOworICAgIHVuaWZvcm0xZnYgPSBH
RVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTFmdik7CisgICAgdW5pZm9ybTFpID0gR0VUX1BST0Nf
QUREUkVTUyhnbFVuaWZvcm0xaSk7CisgICAgdW5pZm9ybTFpdiA9IEdFVF9QUk9DX0FERFJFU1Mo
Z2xVbmlmb3JtMWl2KTsKKyAgICB1bmlmb3JtMmYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9y
bTJmKTsKKyAgICB1bmlmb3JtMmZ2ID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm0yZnYpOwor
ICAgIHVuaWZvcm0yaSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtMmkpOworICAgIHVuaWZv
cm0yaXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTJpdik7CisgICAgdW5pZm9ybTNmID0g
R0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm0zZik7CisgICAgdW5pZm9ybTNmdiA9IEdFVF9QUk9D
X0FERFJFU1MoZ2xVbmlmb3JtM2Z2KTsKKyAgICB1bmlmb3JtM2kgPSBHRVRfUFJPQ19BRERSRVNT
KGdsVW5pZm9ybTNpKTsKKyAgICB1bmlmb3JtM2l2ID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZv
cm0zaXYpOworICAgIHVuaWZvcm00ZiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtNGYpOwor
ICAgIHVuaWZvcm00ZnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTRmdik7CisgICAgdW5p
Zm9ybTRpID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm00aSk7CisgICAgdW5pZm9ybTRpdiA9
IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtNGl2KTsKKyAgICB1bmlmb3JtTWF0cml4MmZ2ID0g
R0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm1NYXRyaXgyZnYpOworICAgIHVuaWZvcm1NYXRyaXgz
ZnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybU1hdHJpeDNmdik7CisgICAgdW5pZm9ybU1h
dHJpeDRmdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtTWF0cml4NGZ2KTsKKyAgICB1c2VQ
cm9ncmFtID0gR0VUX1BST0NfQUREUkVTUyhnbFVzZVByb2dyYW0pOworICAgIHZhbGlkYXRlUHJv
Z3JhbSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xWYWxpZGF0ZVByb2dyYW0pOworICAgIHZlcnRleEF0
dHJpYjFmID0gR0VUX1BST0NfQUREUkVTUyhnbFZlcnRleEF0dHJpYjFmKTsKKyAgICB2ZXJ0ZXhB
dHRyaWIxZnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVmVydGV4QXR0cmliMWZ2KTsKKyAgICB2ZXJ0
ZXhBdHRyaWIyZiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xWZXJ0ZXhBdHRyaWIyZik7CisgICAgdmVy
dGV4QXR0cmliMmZ2ID0gR0VUX1BST0NfQUREUkVTUyhnbFZlcnRleEF0dHJpYjJmdik7CisgICAg
dmVydGV4QXR0cmliM2YgPSBHRVRfUFJPQ19BRERSRVNTKGdsVmVydGV4QXR0cmliM2YpOworICAg
IHZlcnRleEF0dHJpYjNmdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xWZXJ0ZXhBdHRyaWIzZnYpOwor
ICAgIHZlcnRleEF0dHJpYjRmID0gR0VUX1BST0NfQUREUkVTUyhnbFZlcnRleEF0dHJpYjRmKTsK
KyAgICB2ZXJ0ZXhBdHRyaWI0ZnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVmVydGV4QXR0cmliNGZ2
KTsKKyAgICB2ZXJ0ZXhBdHRyaWJQb2ludGVyID0gR0VUX1BST0NfQUREUkVTUyhnbFZlcnRleEF0
dHJpYlBvaW50ZXIpOworCisgICAgaWYgKCFtX3ZhbGlkKSB7CisgICAgICAgIExPR19FUlJPUigi
R3JhcGhpY3NDb250ZXh0M0Q6IEFsbCBuZWVkZWQgT3BlbkdMIGV4dGVuc2lvbnMgYXJlIG5vdCBh
dmFpbGFibGUiKTsKKyAgICAgICAgbV92YWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIGdsVGV4
UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAg
Z2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsK
KyAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RP
X0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICBn
bEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKworICAgIGdl
bkZyYW1lYnVmZmVycygxLCAmbV9tYWluRmJvKTsKKyAgICBtX2N1cnJlbnRGYm8gPSBtX21haW5G
Ym87CisKKyAgICBiaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX21haW5GYm8pOworCisgICAgZ2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7
CisgICAgYmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBt
X2RlcHRoQnVmZmVyKTsKKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIHJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2LCAxLCAxKTsKKyNlbHNlCisgICAgcmVuZGVyYnVmZmVy
U3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfQ09NUE9ORU5UMjQsIDEsIDEpOworI2VuZGlmCisKKyAgICBiaW5kUmVuZGVyYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworIAorICAgIGZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
bV90ZXh0dXJlLCAwKTsKKyAgICBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKyAgICBnbENs
ZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisKKyAgICBpZiAoY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICBMT0dfRVJST1IoIkdyYXBoaWNzQ29udGV4dDNE
OiBJbnZhbGlkIEZCTyIpOworICAgICAgICBtX3ZhbGlkID0gZmFsc2U7CisgICAgfQorfQorCitH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpCit7
CisgICAgZGVsZXRlIG1fZ2xXaWRnZXQ7CisgICAgbV9nbFdpZGdldCA9IDA7Cit9CisKK3ZvaWQq
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFByb2NBZGRyZXNzKGNvbnN0IFN0cmluZyYg
cHJvYykKK3sKKyAgICBTdHJpbmcgZXh0WzNdID0geyAiIiwgIkFSQiIsICJFWFQiIH07CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICBTdHJpbmcgbmFtZVdpdGhF
eHQgPSBwcm9jICsgZXh0W2ldOworCisgICAgICAgIHZvaWQqIGFkZHIgPSBtX2dsV2lkZ2V0LT5j
b250ZXh0KCktPmdldFByb2NBZGRyZXNzKG5hbWVXaXRoRXh0LnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBpZiAoYWRkcikgCisgICAgICAgICAgICByZXR1cm4gYWRkcjsKKyAgICB9CisKKyAgICBM
T0dfRVJST1IoIkdyYXBoaWNzQ29udGV4dDNEOiBOb3QgZm91bmQgR0wgZnVuY3Rpb24gJXMiLCBw
cm9jLnV0ZjgoKS5kYXRhKCkpOworICAgIG1fdmFsaWQgPSBmYWxzZTsKKyAgICByZXR1cm4gMDsK
K30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKK3sKKyAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzKSk7
CisgICAgcmV0dXJuIGNvbnRleHQtPm1faW50ZXJuYWwgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7
Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRycykKKyAgICA6IG1faW50ZXJuYWwobmV3IEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwoYXR0cnMpKQoreworICAgIGlmICghbV9pbnRlcm5hbC0+aXNWYWxpZCgp
KSAKKyAgICAgICAgbV9pbnRlcm5hbCA9IDA7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjp+R3Jh
cGhpY3NDb250ZXh0M0QoKQoreworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBo
aWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICByZXR1cm4g
bV9pbnRlcm5hbC0+bV9nbFdpZGdldDsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0Nv
bnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5h
bC0+bV90ZXh0dXJlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1
cnJlbnQoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7
CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKworICAg
IG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1faW50ZXJuYWwtPm1fbWFpbkZibyk7CisKKyAgICBnbFJlYWRQaXhlbHMoMCwgMCwgbV9j
dXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBtX2ludGVybmFsLT5tX3BpeGVscy5iaXRz
KCkpOworCisgICAgUVBhaW50ZXIqIHAgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICBwLT5kcmF3SW1hZ2UoMCwgMCwgbV9pbnRlcm5hbC0+bV9waXhlbHMu
dHJhbnNmb3JtZWQoUU1hdHJpeCgpLnJvdGF0ZSgxODApKSk7CisKKyAgICBtX2ludGVybmFsLT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ludGVybmFs
LT5tX2N1cnJlbnRGYm8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgp
Cit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQoreworICAgIGlmICgoKHdpZHRoID09IG1fY3VycmVudFdpZHRoKSAmJiAoaGVpZ2h0
ID09IG1fY3VycmVudEhlaWdodCkpIHx8ICghbV9pbnRlcm5hbCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhlaWdodCA9
IGhlaWdodDsKKworICAgIG1faW50ZXJuYWwtPm1fcGl4ZWxzID0gUUltYWdlKG1fY3VycmVudFdp
ZHRoLCBtX2N1cnJlbnRIZWlnaHQsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgZ2xCaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9pbnRlcm5hbC0+bV90ZXh0dXJlKTsKKyAg
ICBnbFRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworICAgIGdsQmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworICAgCisgICAgbV9pbnRlcm5h
bC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9pbnRl
cm5hbC0+bV9tYWluRmJvKTsKKyAgICBtX2ludGVybmFsLT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1faW50ZXJuYWwtPm1fZGVwdGhCdWZmZXIpOwor
I2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgcmVuZGVyYnVmZmVyU3RvcmFnZShHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09N
UE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworI2Vsc2UKKyAgICByZW5kZXJidWZmZXJTdG9yYWdl
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9DT01QT05FTlQyNCwgd2lkdGgsIGhlaWdodCk7CisjZW5kaWYKKyAgICBtX2ludGVybmFsLT5i
aW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworICAg
IAorICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9pbnRlcm5hbC0+bV90ZXh0dXJlLCAwKTsKKyAg
ICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2ludGVybmFsLT5tX2RlcHRoQnVmZmVyKTsKKwor
ICAgIEdMZW51bSBzdGF0dXMgPSBtX2ludGVybmFsLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUik7CisgICAgaWYgKHN0YXR1cyAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJH
cmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZTogSW52YWxpZCBGQk8iKTsKKyAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICBnbENsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9CVUZGRVJfQklUKTsKKyAgICBnbEZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xBY3RpdmVUZXh0dXJlKHRleHR1
cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFt
KTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmF0dGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFt
LT5vYmplY3QoKSwgKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVu
c2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJv
Z3JhbSk7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBt
X2ludGVybmFsLT5iaW5kQXR0cmliTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCks
IGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRl
cm5hbC0+YmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0
KCkgOiAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBidWZmZXIpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5tX2N1
cnJlbnRGYm8gPSAoYnVmZmVyICYmIGJ1ZmZlci0+b2JqZWN0KCkpID8gKEdMdWludCkgYnVmZmVy
LT5vYmplY3QoKSA6IG1faW50ZXJuYWwtPm1fbWFpbkZibzsKKyAgICBtX2ludGVybmFsLT5iaW5k
RnJhbWVidWZmZXIodGFyZ2V0LCBtX2ludGVybmFsLT5tX2N1cnJlbnRGYm8pOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZl
cih0YXJnZXQsIHJlbmRlcmJ1ZmZlciA/IChHTHVpbnQpIHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkg
OiAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUodW5zaWduZWQg
bG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0
dXJlID8gKEdMdWludCkgdGV4dHVyZS0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBi
bHVlLCBkb3VibGUgYWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBnbEJsZW5kQ29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlZCksIHN0YXRp
Y19jYXN0PGZsb2F0PihncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0PihibHVlKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGFscGhhKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1
YXRpb24odW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgZ2xCbGVuZEVxdWF0aW9uKG1vZGUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2Rl
UkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShtb2RlUkdCLCBtb2RlQWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVu
ZEZ1bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEJsZW5kRnVu
YyhzZmFjdG9yLCBkZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJsZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRz
dFJHQiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJu
YWwtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGEo
dGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1
ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMQXJyYXkqIGFycmF5LCB1bnNpZ25l
ZCBsb25nIHVzYWdlKQoreworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5sZW5ndGgoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YnVmZmVyRGF0YSh0YXJnZXQsIGFycmF5LT5ieXRlTGVu
Z3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0
LCBXZWJHTEFycmF5KiBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+bGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZz
ZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpKTsKK30KKwordW5z
aWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNp
Z25lZCBsb25nIHRhcmdldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRh
cmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoZG91YmxlIHIs
IGRvdWJsZSBnLCBkb3VibGUgYiwgZG91YmxlIGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENsZWFyQ29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHIpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZyksIHN0YXRpY19jYXN0PGZsb2F0PihiKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGEpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIodW5z
aWduZWQgbG9uZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgZ2xDbGVhcihtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y2xlYXJEZXB0aChkb3VibGUgZGVwdGgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIGdsQ2xlYXJE
ZXB0aGYoZGVwdGgpOworI2Vsc2UKKyAgICBnbENsZWFyRGVwdGgoZGVwdGgpOworI2VuZGlmCit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChsb25nIHMpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENsZWFyU3RlbmNp
bChzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKGJvb2wgcmVkLCBi
b29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoV2Vi
R0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmNvbXBpbGVTaGFk
ZXIoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNp
Z25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQodW5zaWduZWQg
bG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25n
IHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENvcHlU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZSh1bnNpZ25l
ZCBsb25nIG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBnbEN1bGxGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpk
ZXB0aEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xEZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhib29sIGZsYWcpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERlcHRoTWFzayhmbGFnKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShkb3VibGUgek5lYXIsIGRvdWJsZSB6
RmFyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisjaWYg
ZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKKyAgICBnbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFyKTsK
KyNlbHNlCisgICAgZ2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKKyNlbmRpZgorfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBX
ZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQo
c2hhZGVyKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPmRldGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRp
c2FibGUodW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbERpc2FibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9u
ZyBjb3VudCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIGdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25n
IGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xEcmF3RWxlbWVudHMobW9kZSwg
Y291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90
PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZSh1bnNpZ25l
ZCBsb25nIGNhcCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIGdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlz
aCgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bEZpbmlzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEZsdXNoKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcg
cmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJn
ZXQsIGJ1ZmZlciA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdl
YkdMVGV4dHVyZSogdGV4dHVyZSwgbG9uZyBsZXZlbCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyVGV4dHVy
ZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlID8gKEdMdWludCkgdGV4
dHVyZS0+b2JqZWN0KCkgOiAwLCBsZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmZyb250RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGlu
ZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbS0+b2JqZWN0KCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworCisgICAgR0xpbnQgbWF4TGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFByb2dyYW1p
dihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OkFDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heExlbmd0aCk7CisKKyAgICBHTGNo
YXIgbmFtZVttYXhMZW5ndGhdOyAKKyAgICBHTHNpemVpIG5hbWVMZW5ndGg7CisgICAgR0xpbnQg
c2l6ZTsKKyAgICBHTGVudW0gdHlwZTsKKworICAgIG1faW50ZXJuYWwtPmdldEFjdGl2ZUF0dHJp
YihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgaW5kZXgsIG1heExlbmd0
aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisKKyAgICBpZiAoIW5hbWVMZW5n
dGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1l
LCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNp
emU7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGlu
ZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbS0+b2JqZWN0KCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworCisgICAgR0xpbnQgbWF4TGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFByb2dyYW1p
dihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OkFDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhMZW5ndGgpOworCisgICAgR0xjaGFy
IG5hbWVbbWF4TGVuZ3RoXTsKKyAgICBHTHNpemVpIG5hbWVMZW5ndGg7CisgICAgR0xpbnQgc2l6
ZTsKKyAgICBHTGVudW0gdHlwZTsKKworICAgIG1faW50ZXJuYWwtPmdldEFjdGl2ZVVuaWZvcm0o
c3RhdGljX2Nhc3Q8R0x1aW50Pihwcm9ncmFtLT5vYmplY3QoKSksIGluZGV4LCBtYXhMZW5ndGgs
ICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOworCisgICAgaWYgKCFuYW1lTGVuZ3Ro
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwg
bmFtZUxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXpl
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0
cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisgICAgCisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+
Z2V0QXR0cmliTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIG5hbWUudXRmOCgp
LmRhdGEoKSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwt
Pm1fYXR0cnM7Cit9CisKK3Vuc2lnbmVkIGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9y
KCkKK3sKKyAgICBpZiAobV9pbnRlcm5hbC0+bV9zeW50aGV0aWNFcnJvcnMuc2l6ZSgpID4gMCkg
eworICAgICAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgaXRlciA9IG1f
aW50ZXJuYWwtPm1fc3ludGhldGljRXJyb3JzLmJlZ2luKCk7CisgICAgICAgIHVuc2lnbmVkIGxv
bmcgZXJyID0gKml0ZXI7CisgICAgICAgIG1faW50ZXJuYWwtPm1fc3ludGhldGljRXJyb3JzLnJl
bW92ZShpdGVyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBnbEdldEVycm9yKCk7Cit9
CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFt
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJl
dHVybiBTdHJpbmcoKGNvbnN0IGNoYXIqKSBnbEdldFN0cmluZyhuYW1lKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgbW9kZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIGdsSGludCh0YXJnZXQsIG1vZGUpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpp
c0J1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNCdWZmZXIoKEdMdWludCkgYnVmZmVy
LT5vYmplY3QoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZCh1bnNp
Z25lZCBsb25nIGNhcCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIHJldHVybiBnbElzRW5hYmxlZChjYXApOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQorewor
ICAgIGlmICghZnJhbWVidWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVy
bmFsLT5pc0ZyYW1lYnVmZmVyKChHTHVpbnQpIGZyYW1lYnVmZmVyLT5vYmplY3QoKSk7Cit9CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0p
Cit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRl
cm5hbC0+aXNQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRl
cmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
cmV0dXJuIG1faW50ZXJuYWwtPmlzUmVuZGVyYnVmZmVyKChHTHVpbnQpIHJlbmRlcmJ1ZmZlci0+
b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihXZWJHTFNo
YWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBy
ZXR1cm4gbV9pbnRlcm5hbC0+aXNTaGFkZXIoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1
cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xJ
c1RleHR1cmUoKEdMdWludCkgdGV4dHVyZS0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpsaW5lV2lkdGgoZG91YmxlIHdpZHRoKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xMaW5lV2lkdGgoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHdpZHRoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5saW5rUHJv
Z3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFBpeGVsU3Rv
cmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25P
ZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xQb2x5Z29uT2Zmc2V0KHN0YXRpY19jYXN0
PGZsb2F0PihmYWN0b3IpLCBzdGF0aWNfY2FzdDxmbG9hdD4odW5pdHMpKTsKK30KKworUGFzc1Jl
ZlB0cjxXZWJHTEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVk
IGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICAKKyAgICBpZiAodHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSB8fCBmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEpCisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBSZWZQdHI8V2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheT4gYXJyYXkgPSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUod2lkdGgg
KiBoZWlnaHQgKiA0KTsKKyAgICBnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCAoR0x2b2lkKikgYXJyYXktPmRhdGEoKSk7CisgICAgcmV0dXJuIGFycmF5OyAg
ICAKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0
b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQs
IHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+cmVuZGVy
YnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBi
b29sIGludmVydCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIGdsU2FtcGxlQ292ZXJhZ2Uoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKSwgaW52ZXJ0
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3Nvcihsb25nIHgsIGxvbmcgeSwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFNjaXNzb3IoeCwgeSwgd2lk
dGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShX
ZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBBU1NFUlQo
c2hhZGVyKTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworCisgICAgLy8gRm9yY2UgdG8gR0xTTCAxLjA6CisgICAgLy8gaHR0cHM6Ly9jdnMua2hyb25v
cy5vcmcvc3ZuL3JlcG9zL3JlZ2lzdHJ5L3RydW5rL3B1YmxpYy93ZWJnbC9kb2Mvc3BlYy9XZWJH
TC1zcGVjLmh0bWwjNC40CisgICAgLy8gRklYTUU6IExpbmVzIGJlZ2lubmluZyB3aXRoICIjdmVy
c2lvbiIgc2hvdWxkIGJlIHN0cmlwcGVkIG91dC4KKworICAgIFN0cmluZyBwcmVwYXJlZDsKKyAg
IAorICAgIHByZXBhcmVkLmFwcGVuZCgiI3ZlcnNpb24gMTAwXG4iKTsKKyNpZiBkZWZpbmVkKFFU
X09QRU5HTF9FU18yKQorICAgIHByZXBhcmVkLmFwcGVuZCgicHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7XG4iKTsKKyNlbmRpZgorICAgIHByZXBhcmVkLmFwcGVuZChzdHJpbmcpOworCisgICAgQ1N0
cmluZyBwcmVwYXJlZENTID0gcHJlcGFyZWQudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIGRhdGEg
PSBwcmVwYXJlZENTLmRhdGEoKTsKKyAgICBpbnQgbGVuZ3RoID0gcHJlcGFyZWQubGVuZ3RoKCk7
CisgICAgbV9pbnRlcm5hbC0+c2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCks
IDEsICZkYXRhLCAmbGVuZ3RoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xTdGVu
Y2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmdW5j
LCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbEZ1bmNTZXBhcmF0
ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFj
ZSwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBt
YXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKHVuc2lnbmVkIGxv
bmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU3RlbmNpbE9w
KGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5j
aWxPcFNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNp
Z25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbE9wU2Vw
YXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dGV4UGFyYW1ldGVyZih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBmbG9h
dCB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIGdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2FzdDxmbG9hdD4odmFs
dWUpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaSh1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0xZihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCkKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0x
Zihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2
KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMWZ2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3Jt
MmYobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZv
cm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT51bmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50
IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT51bmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwg
ZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00Zihsb2NhdGlvbiwg
djAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2
KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtNGZ2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0xaShsb25nIGxvY2F0aW9uLCBpbnQgdjApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMWkobG9jYXRpb24s
IHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0
aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xaXYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKGxvbmcg
bG9jYXRpb24sIGludCB2MCwgaW50IHYxKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwg
djEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KGxvbmcgbG9jYXRp
b24sIGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6
ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2kobG9uZyBs
b2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGludCB2MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zaShsb2NhdGlv
biwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYo
bG9uZyBsb2NhdGlvbiwgaW50KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtM2l2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm00aShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyLCBpbnQgdjMpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT51bmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBib29sIHRy
YW5zcG9zZSwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBm
bG9hdCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwg
c2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiBhcnJh
eSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFu
c3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIAorICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
dXNlUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7Cisg
ICAgQVNTRVJUKHByb2dyYW0pOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmFsaWRhdGVQcm9ncmFtKChHTHVpbnQpIHBy
b2dyYW0tPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMWYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjFm
KGluZHgsIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2
KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFycmF5KQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMWZ2
KGluZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
MmYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhB
dHRyaWIyZihpbmR4LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0
ZXhBdHRyaWIyZnYoaW5keCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxv
YXQgdjIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIzZihpbmR4LCB2MCwgdjEsIHYyKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwg
ZmxvYXQqIGFycmF5KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliM2Z2KGluZHgsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0
dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFycmF5KQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+dmVydGV4QXR0cmliNGZ2KGluZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBzaXplLCBp
bnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQg
bG9uZyBvZmZzZXQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUs
IG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3Bv
cnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
Z2xWaWV3cG9ydChzdGF0aWNfY2FzdDxHTGludD4oeCksIHN0YXRpY19jYXN0PEdMaW50Pih5KSwg
c3RhdGljX2Nhc3Q8R0xzaXplaT4od2lkdGgpLCBzdGF0aWNfY2FzdDxHTHNpemVpPihoZWlnaHQp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9u
ZyBwbmFtZSwgdW5zaWduZWQgY2hhciogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0
QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRGbG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xH
ZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNo
bWVudCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50
ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0SW50ZWdlcnYocG5hbWUsIHZh
bHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdl
dFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgcG5hbWUsIHZhbHVlKTsKK30K
KworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dy
YW0qIHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKworICAgIEdMaW50IGxlbmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtaXYoKEdM
dWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpJTkZPX0xPR19MRU5H
VEgsICZsZW5ndGgpOworCisgICAgR0xzaXplaSBzaXplOworCisgICAgR0xjaGFyKiBpbmZvID0g
KEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoIWluZm8pCisgICAgICAgIHJl
dHVybiAiIjsKKworICAgIG1faW50ZXJuYWwtPmdldFByb2dyYW1JbmZvTG9nKChHTHVpbnQpIHBy
b2dyYW0tPm9iamVjdCgpLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKKworICAgIFN0cmluZyByZXN1
bHQoaW5mbyk7CisgICAgZmFzdEZyZWUoaW5mbyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwt
PmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoV2ViR0xTaGFkZXIqIHNoYWRlciwg
dW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJu
YWwtPmdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIHBuYW1lLCB2YWx1ZSk7
Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNo
YWRlciogc2hhZGVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisKKyAgICBHTGludCBsZW5ndGg7CisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVyaXYoKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OklORk9fTE9HX0xFTkdU
SCwgJmxlbmd0aCk7CisKKyAgICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFyKiBpbmZvID0gKEdM
Y2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoIWluZm8pCisgICAgICAgIHJldHVy
biAiIjsKKworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlckluZm9Mb2coKEdMdWludCkgc2hhZGVy
LT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisKKyAgICBTdHJpbmcgcmVzdWx0KGlu
Zm8pOworICAgIGZhc3RGcmVlKGluZm8pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRl
cikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAg
R0xpbnQgbGVuZ3RoOworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRl
ci0+b2JqZWN0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfU09VUkNFX0xFTkdUSCwgJmxl
bmd0aCk7CisKKyAgICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciop
IGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoIWluZm8pCisgICAgICAgIHJldHVybiAiIjsK
KworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlclNvdXJjZSgoR0x1aW50KSBzaGFkZXItPm9iamVj
dCgpLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKKworICAgIFN0cmluZyByZXN1bHQoaW5mbyk7Cisg
ICAgZmFzdEZyZWUoaW5mbyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5z
aWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBu
YW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRl
cml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xH
ZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9j
YXRpb24sIGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1mdigoR0x1aW50KSBwcm9ncmFt
LT5vYmplY3QoKSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VW5pZm9ybWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgaW50
KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwg
bG9jYXRpb24sIHZhbHVlKTsKK30KKworbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9y
bUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRVbmlmb3JtTG9jYXRpb24o
KEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFZlcnRleEF0
dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBu
YW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2
YWx1ZSk7Cit9CisKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNl
dCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgCisgICAgdm9pZCogcG9pbnRl
cjsKKyAgICBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUs
ICZwb2ludGVyKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxsb25nPihwb2ludGVyKTsK
K30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWdu
ZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQoreworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBp
eGVscyk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBJbWFnZSogaW1hZ2UsIGJvb2wg
ZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK3sKKyAgICBBU1NFUlQoaW1hZ2UpOworICAg
IAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIEdMdWludCBmb3JtYXQ7CisgICAgR0x1aW50IGlu
dGVybmFsRm9ybWF0OworCisgICAgaWYgKCFleHRyYWN0SW1hZ2VEYXRhKGltYWdlLCBmbGlwWSwg
cHJlbXVsdGlwbHlBbHBoYSwgaW1hZ2VEYXRhLCAmZm9ybWF0LCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmludGVybmFsRm9ybWF0KSkgeworICAgICAgICBMT0dfRVJST1IoIkdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhJbWFnZTJEOiBjb3VsZCBub3QgZXh0cmFjdCBJbWFnZSBkYXRhIik7Cisg
ICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxGb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIAorICAg
ICAgICAgICAgICAgICAwLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCBpbWFnZURhdGEuZGF0YSgpKTsKKworICAgIHJldHVybiAwOworfQorICAgIAoraW50IEdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2
ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQor
eworICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBH
cmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IGxldmVsLCB1bnNpZ25lZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCBJbWFnZSogaW1hZ2UsIGJvb2wg
ZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK3sKKyAgICBBU1NFUlQoaW1hZ2UpOworCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBHTHVpbnQgZm9ybWF0OworICAgIEdM
dWludCBpbnRlcm5hbEZvcm1hdDsKKworICAgIGlmICghZXh0cmFjdEltYWdlRGF0YShpbWFnZSwg
ZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9y
bWF0KSkgeworICAgICAgICBMT0dfRVJST1IoIkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFn
ZTJEOiBjb3VsZCBub3QgZXh0cmFjdCBJbWFnZSBkYXRhIik7CisgICAgICAgIHJldHVybiAtMTsK
KyAgICB9CisKKyAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwg
aW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgCisgICAgICAgICAgICAgICAgICAgIGZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkp
OworCisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGVCdWZmZXIoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgR0x1aW50IGhhbmRsZTsKKyAgICBtX2ludGVybmFsLT5nZW5CdWZmZXJzKDEsICZoYW5k
bGUpOworICAgIHJldHVybiBoYW5kbGU7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBHTHVpbnQgaGFuZGxlOworICAgIG1faW50ZXJuYWwtPmdlbkZyYW1l
YnVmZmVycygxLCAmaGFuZGxlKTsKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit1bnNpZ25lZCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlUHJv
Z3JhbSgpOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVm
ZmVyKCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IEdMdWludCBoYW5kbGU7CisgICAgbV9pbnRlcm5hbC0+Z2VuUmVuZGVyYnVmZmVycygxLCAmaGFu
ZGxlKTsKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5jcmVhdGVT
aGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFH
TUVOVF9TSEFERVIgOiBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7Cit9CisKK3Vu
c2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIEdMdWludCBoYW5kbGU7CisgICAg
Z2xHZW5UZXh0dXJlcygxLCAmaGFuZGxlKTsKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIodW5zaWduZWQgYnVmZmVyKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
ZGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGVsZXRlRnJhbWVidWZmZXIodW5zaWduZWQgZnJhbWVidWZmZXIpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCBwcm9ncmFtKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlUHJvZ3JhbShwcm9n
cmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKHVu
c2lnbmVkIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJnJlbmRl
cmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcih1bnNp
Z25lZCBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xEZWxldGVUZXh0dXJl
cygxLCAmdGV4dHVyZSk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6c2l6ZUluQnl0ZXMo
aW50IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGJ5dGUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1
Ynl0ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgICAgIHJldHVy
biBzaXplb2YoR0xzaG9ydCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
U0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KEdMdWludCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAgIHJl
dHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcih1bnNp
Z25lZCBsb25nIGVycm9yKQoreworICAgIG1faW50ZXJuYWwtPm1fc3ludGhldGljRXJyb3JzLmFk
ZChlcnJvcik7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFn
ZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wqIGhhc0FscGhhQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBbHBoYU9wKiBuZWVkZWRBbHBoYU9wLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0KQoreworICAgIFFJbWFnZTo6Rm9y
bWF0IGltYWdlRm9ybWF0ID0gKCFwcmVtdWx0aXBseUFscGhhKSA/IAorICAgICAgICBRSW1hZ2U6
OkZvcm1hdF9BUkdCMzIgOgorICAgICAgICBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlw
bGllZDsKKyAKKyAgICBRUGl4bWFwKiBuYXRpdmVQaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsgCisKKyAgICAqaGFzQWxwaGFDaGFubmVsID0gdHJ1ZTsKKyAgICAq
bmVlZGVkQWxwaGFPcCA9IGtBbHBoYURvTm90aGluZzsKKyAgICAqZm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE7CisKKyAgICBRSW1hZ2UgbmF0aXZlSW1hZ2UgPSBuYXRpdmVQaXhtYXAt
PnRvSW1hZ2UoKS5jb252ZXJ0VG9Gb3JtYXQoaW1hZ2VGb3JtYXQpOworICAgIG91dHB1dFZlY3Rv
ci5hcHBlbmQobmF0aXZlSW1hZ2UuYml0cygpLCBuYXRpdmVJbWFnZS5ieXRlQ291bnQoKSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykK
ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBiL1dlYktpdC9xdC9B
cGkvcXdlYnNldHRpbmdzLmNwcAppbmRleCBkNjBmMDljLi5lNmZkZjYxIDEwMDY0NAotLS0gYS9X
ZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0
dGluZ3MuY3BwCkBAIC0xNTgsNiArMTU4LDEzIEBAIHZvaWQgUVdlYlNldHRpbmdzUHJpdmF0ZTo6
YXBwbHkoKQogCiAgICAgICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZCh2YWx1ZSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgICAgICB2YWx1
ZSA9IGF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwtPmF0dHJpYnV0ZXMudmFsdWUoUVdlYlNl
dHRpbmdzOjpXZWJHTEVuYWJsZWQpKTsKKworICAgICAgICBzZXR0aW5ncy0+c2V0V2ViR0xFbmFi
bGVkKHZhbHVlKTsKKyNlbmRpZgorIAogICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUo
UVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGlu
Z3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cykpOwogICAgICAgICBzZXR0aW5ncy0+c2V0SmF2
YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSh2YWx1ZSk7CkBAIC00MDEsNiArNDA4
LDcgQEAgUVdlYlNldHRpbmdzOjpRV2ViU2V0dGluZ3MoKQogICAgIGQtPmF0dHJpYnV0ZXMuaW5z
ZXJ0KFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscywgZmFsc2Up
OwogICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2Fu
QWNjZXNzRmlsZVVybHMsIHRydWUpOwogICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0
aW5nczo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIGZhbHNlKTsKKyAgICBkLT5hdHRy
aWJ1dGVzLmluc2VydChRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgZmFsc2UpOwogICAgIGQt
Pm9mZmxpbmVTdG9yYWdlRGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAgIGQtPmRl
ZmF1bHRUZXh0RW5jb2RpbmcgPSBRTGF0aW4xU3RyaW5nKCJpc28tODg1OS0xIik7CiB9CmRpZmYg
LS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
c2V0dGluZ3MuaAppbmRleCBiMWY1Y2YyLi4yOWMwMWI2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQv
QXBpL3F3ZWJzZXR0aW5ncy5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgKQEAg
LTcwLDcgKzcwLDggQEAgcHVibGljOgogICAgICAgICBMb2NhbENvbnRlbnRDYW5BY2Nlc3NGaWxl
VXJscywKICAgICAgICAgRG5zUHJlZmV0Y2hFbmFibGVkLAogICAgICAgICBYU1NBdWRpdG9yRW5h
YmxlZCwKLSAgICAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQKKyAgICAgICAgQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsCisgICAgICAgIFdlYkdMRW5hYmxlZAogICAgIH07
CiAgICAgZW51bSBXZWJHcmFwaGljIHsKICAgICAgICAgTWlzc2luZ0ltYWdlR3JhcGhpYywKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4
IDJkMWE0ODMuLmM1ZTZlNDEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEwLTAyLTIzICBKYXJra28g
U2Fra2luZW4gIDxqYXJra28uc2Fra2luZW5AdGlldG8uY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFF0IFdlYkdMIHN1cHBvcnQKKworICAgICAg
ICBBZGRzIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgb2YgV2ViR0wgc3VwcG9ydCB0byBRV2ViU2V0
dGluZ3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NTE1MworCisgICAgICAgICogQXBpL3F3ZWJzZXR0aW5ncy5jcHA6CisgICAgICAgIChRV2ViU2V0
dGluZ3NQcml2YXRlOjphcHBseSk6CisgICAgICAgIChRV2ViU2V0dGluZ3M6OlFXZWJTZXR0aW5n
cyk6CisgICAgICAgICogQXBpL3F3ZWJzZXR0aW5ncy5oOgorCiAyMDEwLTAyLTIzICBTdGV2ZSBC
bG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xz
L0NoYW5nZUxvZwppbmRleCBlMDY2NTE5Li4zMDkxOGEyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMDItMjMgIEphcmtrbyBTYWtraW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXQgV2Vi
R0wgc3VwcG9ydAorCisgICAgICAgIEFkZHMgdG9nZ2xpbmcgb2YgV2ViR0wgc3VwcG9ydCB0byBR
dExhdW5jaGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzUxNTMKKworICAgICAgICAqIFF0TGF1bmNoZXIvbWFpbi5jcHA6CisgICAgICAgIChMYXVu
Y2hlcldpbmRvdzo6dG9nZ2xlV2ViR0wpOgorICAgICAgICAoTGF1bmNoZXJXaW5kb3c6OnNldHVw
VUkpOgorCiAyMDEwLTAyLTIzICBMYXN6bG8gR29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5va2lh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4K
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAgYi9XZWJLaXRUb29s
cy9RdExhdW5jaGVyL21haW4uY3BwCmluZGV4IDEyMDNjZTcuLmNmOGE2OWEgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAKKysrIGIvV2ViS2l0VG9vbHMvUXRMYXVu
Y2hlci9tYWluLmNwcApAQCAtMTE2LDYgKzExNiw3IEBAIHByb3RlY3RlZCBzbG90czoKIAogICAg
IHZvaWQgc2V0VG91Y2hNb2NraW5nKGJvb2wgb24pOwogICAgIHZvaWQgdG9nZ2xlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZyhib29sIHRvZ2dsZSk7CisgICAgdm9pZCB0b2dnbGVXZWJHTChib29sIHRv
Z2dsZSk7CiAgICAgdm9pZCBpbml0aWFsaXplVmlldyhib29sIHVzZUdyYXBoaWNzVmlldyA9IGZh
bHNlKTsKIAogcHVibGljIHNsb3RzOgpAQCAtNDQ1LDYgKzQ0NiwxMSBAQCB2b2lkIExhdW5jaGVy
V2luZG93Ojp0b2dnbGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGJvb2wgdG9nZ2xlKQogICAgIHBh
Z2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQsIHRvZ2dsZSk7CiB9CiAKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6OnRv
Z2dsZVdlYkdMKGJvb2wgdG9nZ2xlKQoreworICAgIHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0
cmlidXRlKFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkLCB0b2dnbGUpOworfQorCiB2b2lkIExh
dW5jaGVyV2luZG93Ojppbml0aWFsaXplVmlldyhib29sIHVzZUdyYXBoaWNzVmlldykKIHsKICAg
ICBkZWxldGUgbV92aWV3OwpAQCAtNTU0LDYgKzU2MCwxMCBAQCB2b2lkIExhdW5jaGVyV2luZG93
OjpzZXR1cFVJKCkKICAgICB0b2dnbGVHcmFwaGljc1ZpZXctPnNldENoZWNrYWJsZSh0cnVlKTsK
ICAgICB0b2dnbGVHcmFwaGljc1ZpZXctPnNldENoZWNrZWQoZmFsc2UpOwogCisgICAgUUFjdGlv
biogdG9nZ2xlV2ViR0wgPSB0b29sc01lbnUtPmFkZEFjdGlvbigiVG9nZ2xlIFdlYkdMIiwgdGhp
cywgU0xPVCh0b2dnbGVXZWJHTChib29sKSkpOworICAgIHRvZ2dsZVdlYkdMLT5zZXRDaGVja2Fi
bGUodHJ1ZSk7CisgICAgdG9nZ2xlV2ViR0wtPnNldENoZWNrZWQoZmFsc2UpOworCiAgICAgUUFj
dGlvbiogdG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IGdyYXBoaWNzVmlld01lbnUtPmFk
ZEFjdGlvbigiVG9nZ2xlIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nIiwgdGhpcywgU0xPVCh0b2dn
bGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGJvb2wpKSk7CiAgICAgdG9nZ2xlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZy0+c2V0Q2hlY2thYmxlKHRydWUpOwogICAgIHRvZ2dsZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmctPnNldENoZWNrZWQoZmFsc2UpOwo=
</data>
<flag name="review"
          id="32234"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49383</attachid>
            <date>2010-02-24 06:03:37 -0800</date>
            <delta_ts>2010-02-25 04:53:41 -0800</delta_ts>
            <desc>Qt WebGL support</desc>
            <filename>qt-webgl-support-10.diff</filename>
            <type>text/plain</type>
            <size>77986</size>
            <attacher name="Jarkko Sakkinen">jarkko.sakkinen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjA2ZGIxZS4uYTJmODBhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjkgQEAKKzIwMTAtMDItMjMgIEphcmtrbyBTYWtr
aW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXQgV2ViR0wgc3VwcG9ydAorCisgICAgICAgIEFk
ZHMgR3JhcGhpY3NDb250ZXh0M0QgUXRXZWJLaXQgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTE1MworCisgICAgICAgICog
V2ViQ29yZS5wcmk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6Z2V0UHJvY0FkZHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGlj
c0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVu
ZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2spOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpk
ZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2Fi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0Fy
cmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2gpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0J1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpw
aXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cG9seWdv
bk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNv
bXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZm
ZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVD
b3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2Npc3Nvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
M2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00Zik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRl
cmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hh
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisKIDIw
MTAtMDItMjMgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3Qg
cmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJpIGIvV2ViQ29yZS9XZWJD
b3JlLnByaQppbmRleCAyN2YxYmI2Li5mYzc5ZjhkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUucHJpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcmkKQEAgLTI4Nyw4ICsyODcsMTcgQEAgSURM
X0JJTkRJTkdTICs9IFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCiAgICAg
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogICAgIGh0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMQWN0
aXZlSW5mby5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlkbCBcCisgICAgaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaWRsIFwK
KyAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5pZGwgXAogICAgIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVy
LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmlkbCBcCisgICAgaHRtbC9j
YW52YXMvV2ViR0xUZXh0dXJlLmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9j
YXRpb24uaWRsIFwKICAgICBodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmlkbCBc
CiAgICAgaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmlkbCBcCiAgICAgaHRtbC9j
YW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaWRsIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGM2MjUyMjQuLjhjYzk2MWYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBy
bwpAQCAtMjY4NSw2ICsyNjg1LDg3IEBAIFNPVVJDRVMgKz0gXAogfQogfQogCitjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfM0RfQ0FOVkFTPTEpIHsKK1FUICs9IG9wZW5nbAorSEVBREVSUyArPSBc
CisJYmluZGluZ3MvanMvSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBcCisJYmluZGlu
Z3MvanMvSlNXZWJHTEFycmF5SGVscGVyLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJy
YXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVj
dG9yLmggXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yLmggXAorCWJp
bmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMv
SlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNX
ZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdM
VW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuaCBcCisJaHRtbC9jYW52YXMvQ2FudmFzQ29u
dGV4dEF0dHJpYnV0ZXMuaCBcCisJaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmggXAorCWh0bWwv
Y2FudmFzL1dlYkdMQWN0aXZlSW5mby5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVy
LmggXAorCWh0bWwvY2FudmFzL1dlYkdMQXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xCdWZm
ZXIuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0QXR0cmlidXRlcy5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuaCBc
CisJaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEdl
dEluZm8uaCBcCisJaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uaCBcCisJaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaCBcCisJaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggXAorCWh0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmggXAorCWh0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9X
ZWJHTFRleHR1cmUuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBcCisJ
aHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkSW50QXJyYXkuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJy
YXkuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCAKKworU09V
UkNFUyArPSBcCisJYmluZGluZ3MvanMvSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuY3Bw
IFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9K
U1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQnl0
ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1
Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcCBcCisJ
YmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9q
cy9KU1dlYkdMSW50QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q29u
c3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHAg
XAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCBc
CisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcCBcCisJYmlu
ZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRp
bmdzL2pzL0pTV2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMv
SlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMv
SlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAgXAorCWh0bWwvY2FudmFzL0NhbnZh
c0NvbnRleHRBdHRyaWJ1dGVzLmNwcCBcCisgICAgaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmNw
cCBcCisJaHRtbC9jYW52YXMvV2ViR0xBcnJheUJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dl
YkdMQXJyYXkuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAgXAorCWh0bWwvY2Fu
dmFzL1dlYkdMQnl0ZUFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5jcHAgXAorCWh0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTEdldEluZm8uY3Bw
IFwKKwlodG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwIFwKKwlodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHAgXAorCWh0bWwvY2Fu
dmFzL1dlYkdMVGV4dHVyZS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9u
LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAgXAorCWh0bWwv
Y2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcCBcCisKK30KKworCiBpbmNsdWRlKCQkUFdELy4uL1dlYktpdC9xdC9BcGkvaGVhZGVycy5w
cmkpCiBpbmNsdWRlKC4uL2luY2x1ZGUvUXRXZWJLaXQvY2xhc3NoZWFkZXJzLnByaSkKIEhFQURF
UlMgKz0gJCRXRUJLSVRfQVBJX0hFQURFUlMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAwYTQxZGM2Li5jZjFkZjcwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC00NCw2ICs0NCwxMyBA
QCB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7CiBjb25zdCAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBOdWxsUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCA9IDA7CiB0
eXBlZGVmIEdMdWludCBQbGF0Zm9ybTNET2JqZWN0OwogY29uc3QgUGxhdGZvcm0zRE9iamVjdCBO
dWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7CisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxR
dE9wZW5HTC9RdE9wZW5HTD4KKwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEOworY29uc3QgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgPSAwOwordHlwZWRlZiBpbnQgUGxhdGZvcm0zRE9iamVjdDsKK2NvbnN0IFBs
YXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3JtM0RPYmplY3QgPSAwOwogI2Vsc2UKIHR5cGVkZWYg
dm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsKIGNvbnN0ICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEID0gMDsKQEAgLTczLDcgKzgw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICAvLyBGSVhNRTogaWRlYWxs
eSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRmb3Jtcy4KLSNpZiBQTEFURk9STShDSFJP
TUlVTSkKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oUVQpCiAgICAgY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICNlbmRpZgogCkBAIC00MDksNiArNDE2LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0
OwogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OworI2Vs
aWYgUExBVEZPUk0oUVQpCisgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCgpOworICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3Jt
VGV4dHVyZSgpIGNvbnN0OwogI2Vsc2UKICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gTnVsbFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0Q7IH0KICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRl
eHR1cmUoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm0zRE9iamVjdDsgfQpAQCAtNzA0LDcg
KzcxNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZiAgICAgICAgCiAKICAgICAgICAg
Ly8gRklYTUU6IGlkZWFsbHkgdGhpcyB3b3VsZCBiZSB1c2VkIG9uIGFsbCBwbGF0Zm9ybXMuCi0j
aWYgUExBVEZPUk0oQ0hST01JVU0pCisjaWYgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JN
KFFUKQogICAgICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICAg
ICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+IG1faW50ZXJuYWw7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNGQwMjcKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCkBAIC0wLDAgKzEsMTYyNyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTAgVGlldG8gQ29ycG9yYXRpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICAgICAKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ2FudmFzT2JqZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheS5oIgorI2lu
Y2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xGbG9hdEFycmF5LmgiCisjaW5j
bHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMSW50QXJyYXkuaCIKKyNp
bmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVy
LmgiCisjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEJ5
dGVBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCisjaWYgRU5BQkxFKDNE
X0NBTlZBUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIWRlZmluZWQoR0xjaGFyKQor
dHlwZWRlZiBjaGFyIEdMY2hhcjsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQVBJRU5UUlkpCisj
ZGVmaW5lIEFQSUVOVFJZCisjZW5kaWYKKwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xBY3Rp
dmVUZXh0dXJlVHlwZSkgKEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEF0dGFj
aFNoYWRlclR5cGUpIChHTHVpbnQsIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bEJpbmRBdHRyaWJMb2NhdGlvblR5cGUpIChHTHVpbnQsIEdMdWludCwgY29uc3QgY2hhciopOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCaW5kQnVmZmVyVHlwZSkgKEdMZW51bSwgR0x1aW50
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQmluZEZyYW1lYnVmZmVyVHlwZSkgKEdMZW51
bSwgR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQmluZFJlbmRlcmJ1ZmZlclR5
cGUpIChHTGVudW0sIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJsZW5kQ29s
b3JUeXBlKSAoR0xjbGFtcGYsIEdMY2xhbXBmLCBHTGNsYW1wZiwgR0xjbGFtcGYpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSogZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVUeXBlKShHTGVudW0sIEdM
ZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJsZW5kRnVuY1NlcGFyYXRlVHlwZSko
R0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0
QWxwaGEpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCdWZmZXJEYXRhVHlwZSkgKEdMZW51
bSwgR0xzaXplaXB0ciwgY29uc3QgR0x2b2lkKiwgR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsQnVmZmVyU3ViRGF0YVR5cGUpIChHTGVudW0sIEdMaW50cHRyLCBHTHNpemVpcHRy
LCBjb25zdCBHTHZvaWQqKTsKK3R5cGVkZWYgR0xlbnVtIChBUElFTlRSWSogZ2xDaGVja0ZyYW1l
YnVmZmVyU3RhdHVzVHlwZSkgKEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbENv
bXBpbGVTaGFkZXJUeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgR0x1aW50IChBUElFTlRSWSogZ2xD
cmVhdGVQcm9ncmFtVHlwZSkgKCk7Cit0eXBlZGVmIEdMdWludCAoQVBJRU5UUlkqIGdsQ3JlYXRl
U2hhZGVyVHlwZSkgKEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERlbGV0ZUJ1
ZmZlcnNUeXBlKSAoR0xzaXplaSwgY29uc3QgR0x1aW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZKiBnbERlbGV0ZUZyYW1lYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCop
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xEZWxldGVQcm9ncmFtVHlwZSkgKEdMdWludCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBlKSAoR0xz
aXplaSBuLCBjb25zdCBHTHVpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsRGVsZXRl
U2hhZGVyVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERldGFjaFNo
YWRlclR5cGUpIChHTHVpbnQsIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSogZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2
b2lkIChBUElFTlRSWSogZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlclR5cGUpIChHTGVudW0sIEdM
ZW51bSwgR0xlbnVtLCBHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRFR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xlbnVtLCBHTHVpbnQsIEdMaW50
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2VuQnVmZmVyc1R5cGUpIChHTHNpemVpLCBH
THVpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2VuZXJhdGVNaXBtYXBUeXBlKSAo
R0xlbnVtIHRhcmdldCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdlbkZyYW1lYnVmZmVy
c1R5cGUpIChHTHNpemVpLCBHTHVpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2Vu
UmVuZGVyYnVmZmVyc1R5cGUpIChHTHNpemVpLCBHTHVpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsR2V0QWN0aXZlQXR0cmliVHlwZSkgKEdMdWludCwgR0x1aW50LCBHTHNpemVpLCBH
THNpemVpKiwgR0xpbnQqLCBHTGVudW0qLCBHTGNoYXIqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkqIGdsR2V0QWN0aXZlVW5pZm9ybVR5cGUpIChHTHVpbnQsIEdMdWludCwgR0xzaXplaSwgR0xz
aXplaSosIEdMaW50KiwgR0xlbnVtKiwgR0xjaGFyKik7Cit0eXBlZGVmIEdMaW50IChBUElFTlRS
WSogZ2xHZXRBdHRyaWJMb2NhdGlvblR5cGUpIChHTHVpbnQsIGNvbnN0IGNoYXIqKTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXZUeXBlKSAoR0xlbnVtLCBH
TGVudW0sIEdMaW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2VHlwZSkgKEdMZW51bSwgR0xlbnVtLCBHTGVudW0sIEdMaW50
KiBwYXJhbXMpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRQcm9ncmFtSW5mb0xvZ1R5
cGUpIChHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkqLCBjaGFyKik7Cit0eXBlZGVmIHZvaWQgKEFQ
SUVOVFJZKiBnbEdldFByb2dyYW1pdlR5cGUpIChHTHVpbnQsIEdMZW51bSwgR0xpbnQqKTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZUeXBlKSAo
R0xlbnVtLCBHTGVudW0sIEdMaW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldFNo
YWRlckluZm9Mb2dUeXBlKSAoR0x1aW50LCBHTHNpemVpLCBHTHNpemVpKiwgY2hhciopOwordHlw
ZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRTaGFkZXJpdlR5cGUpIChHTHVpbnQsIEdMZW51bSwg
R0xpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0U2hhZGVyU291cmNlVHlwZSkg
KEdMdWludCwgR0xzaXplaSwgR0xzaXplaSosIGNoYXIqKTsKK3R5cGVkZWYgR0xpbnQgKEFQSUVO
VFJZKiBnbEdldFVuaWZvcm1Mb2NhdGlvblR5cGUpIChHTHVpbnQsIGNvbnN0IGNoYXIqKTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0VW5pZm9ybWZ2VHlwZSkgKEdMdWludCwgR0xpbnQs
IEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0VW5pZm9ybWl2VHlwZSkg
KEdMdWludCwgR0xpbnQsIEdMaW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldFZl
cnRleEF0dHJpYmZ2VHlwZSkgKEdMdWludCwgR0xlbnVtLCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZKiBnbEdldFZlcnRleEF0dHJpYml2VHlwZSkgKEdMdWludCwgR0xlbnVtLCBH
TGludCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVy
dlR5cGUpIChHTHVpbnQsIEdMZW51bSwgR0x2b2lkKiopOwordHlwZWRlZiBHTGJvb2xlYW4gKEFQ
SUVOVFJZKiBnbElzQnVmZmVyVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJ
RU5UUlkqIGdsSXNGcmFtZWJ1ZmZlclR5cGUpIChHTHVpbnQpOwordHlwZWRlZiBHTGJvb2xlYW4g
KEFQSUVOVFJZKiBnbElzUHJvZ3JhbVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiBHTGJvb2xlYW4g
KEFQSUVOVFJZKiBnbElzUmVuZGVyYnVmZmVyVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIEdMYm9v
bGVhbiAoQVBJRU5UUlkqIGdsSXNTaGFkZXJUeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkqIGdsTGlua1Byb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsUmVuZGVyYnVmZmVyU3RvcmFnZVR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xzaXpl
aSwgR0xzaXplaSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFNoYWRlclNvdXJjZVR5cGUp
IChHTHVpbnQsIEdMc2l6ZWksIGNvbnN0IGNoYXIqKiwgY29uc3QgR0xpbnQqKTsKK3R5cGVkZWYg
dm9pZCAoQVBJRU5UUlkqIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZVR5cGUpIChHTGVudW0sIEdMZW51
bSwgR0xpbnQsIEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFN0ZW5jaWxNYXNr
U2VwYXJhdGVUeXBlKSAoR0xlbnVtLCBHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xTdGVuY2lsT3BTZXBhcmF0ZVR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xlbnVtLCBHTGVudW0p
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMWZUeXBlKSAoR0xpbnQsIEdMZmxv
YXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMWZ2VHlwZSkgKEdMaW50LCBH
THNpemVpLCBjb25zdCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZv
cm0xaVR5cGUpIChHTGludCwgR0xpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlm
b3JtMWl2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGludCopOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSogZ2xVbmlmb3JtMmZUeXBlKSAoR0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQpOwor
dHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMmZ2VHlwZSkgKEdMaW50LCBHTHNpemVp
LCBjb25zdCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0yaVR5
cGUpIChHTGludCwgR0xpbnQsIEdMaW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5p
Zm9ybTJpdlR5cGUpIChHTGludCwgR0xzaXplaSwgY29uc3QgR0xpbnQqKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTNmVHlwZSkgKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBH
TGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTNmdlR5cGUpIChHTGlu
dCwgR0xzaXplaSwgY29uc3QgR0xmbG9hdCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xV
bmlmb3JtM2lUeXBlKSAoR0xpbnQsIEdMaW50LCBHTGludCwgR0xpbnQpOwordHlwZWRlZiB2b2lk
IChBUElFTlRSWSogZ2xVbmlmb3JtM2l2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGlu
dCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtNGZUeXBlKSAoR0xpbnQsIEdM
ZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSogZ2xVbmlmb3JtNGZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0Kik7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm00aVR5cGUpIChHTGludCwgR0xpbnQsIEdM
aW50LCBHTGludCwgR0xpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtNGl2
VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGludCopOwordHlwZWRlZiB2b2lkIChBUElF
TlRSWSogZ2xVbmlmb3JtTWF0cml4MmZ2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4s
IGNvbnN0IEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybU1hdHJp
eDNmdlR5cGUpIChHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0Kik7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm1NYXRyaXg0ZnZUeXBlKSAoR0xpbnQsIEdM
c2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCopOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSogZ2xVc2VQcm9ncmFtVHlwZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bFZhbGlkYXRlUHJvZ3JhbVR5cGUpIChHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xWZXJ0ZXhBdHRyaWIxZlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQpOwordHlwZWRlZiB2
b2lkIChBUElFTlRSWSogZ2xWZXJ0ZXhBdHRyaWIxZnZUeXBlKSAoR0x1aW50LCBjb25zdCBHTGZs
b2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjJmVHlwZSkgKEdM
dWludCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZKiBnbFZlcnRleEF0dHJpYjJmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQqKTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVmVydGV4QXR0cmliM2ZUeXBlKSAoR0x1aW50LCBjb25z
dCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0KTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkqIGdsVmVydGV4QXR0cmliM2Z2VHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCop
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xWZXJ0ZXhBdHRyaWI0ZlR5cGUpIChHTHVpbnQs
IGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxv
YXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xWZXJ0ZXhBdHRyaWI0ZnZUeXBlKSAoR0x1
aW50LCBjb25zdCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0
dHJpYlBvaW50ZXJUeXBlKSAoR0x1aW50LCBHTGludCwgR0xlbnVtLCBHTGJvb2xlYW4sIEdMc2l6
ZWksIGNvbnN0IEdMdm9pZCopOworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsK
K3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOwor
CisgICAgYm9vbCBpc0NvbnRleHRWYWxpZCgpIHsgcmV0dXJuIG1fY29udGV4dFZhbGlkOyB9CisK
KyAgICBnbEFjdGl2ZVRleHR1cmVUeXBlIGFjdGl2ZVRleHR1cmU7CisgICAgZ2xBdHRhY2hTaGFk
ZXJUeXBlIGF0dGFjaFNoYWRlcjsKKyAgICBnbEJpbmRBdHRyaWJMb2NhdGlvblR5cGUgYmluZEF0
dHJpYkxvY2F0aW9uOworICAgIGdsQmluZEJ1ZmZlclR5cGUgYmluZEJ1ZmZlcjsKKyAgICBnbEJp
bmRGcmFtZWJ1ZmZlclR5cGUgYmluZEZyYW1lYnVmZmVyOworICAgIGdsQmluZFJlbmRlcmJ1ZmZl
clR5cGUgYmluZFJlbmRlcmJ1ZmZlcjsKKyAgICBnbEJsZW5kQ29sb3JUeXBlIGJsZW5kQ29sb3I7
CisgICAgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVUeXBlIGJsZW5kRXF1YXRpb25TZXBhcmF0ZTsK
KyAgICBnbEJsZW5kRnVuY1NlcGFyYXRlVHlwZSBibGVuZEZ1bmNTZXBhcmF0ZTsKKyAgICBnbEJ1
ZmZlckRhdGFUeXBlIGJ1ZmZlckRhdGE7CisgICAgZ2xCdWZmZXJTdWJEYXRhVHlwZSBidWZmZXJT
dWJEYXRhOworICAgIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c1R5cGUgY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1czsKKyAgICBnbENvbXBpbGVTaGFkZXJUeXBlIGNvbXBpbGVTaGFkZXI7CisgICAgZ2xD
cmVhdGVQcm9ncmFtVHlwZSBjcmVhdGVQcm9ncmFtOworICAgIGdsQ3JlYXRlU2hhZGVyVHlwZSBj
cmVhdGVTaGFkZXI7CisgICAgZ2xEZWxldGVCdWZmZXJzVHlwZSBkZWxldGVCdWZmZXJzOworICAg
IGdsRGVsZXRlRnJhbWVidWZmZXJzVHlwZSBkZWxldGVGcmFtZWJ1ZmZlcnM7CisgICAgZ2xEZWxl
dGVQcm9ncmFtVHlwZSBkZWxldGVQcm9ncmFtOworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc1R5
cGUgZGVsZXRlUmVuZGVyYnVmZmVyczsKKyAgICBnbERlbGV0ZVNoYWRlclR5cGUgZGVsZXRlU2hh
ZGVyOworICAgIGdsRGV0YWNoU2hhZGVyVHlwZSBkZXRhY2hTaGFkZXI7CisgICAgZ2xEaXNhYmxl
VmVydGV4QXR0cmliQXJyYXlUeXBlIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheTsKKyAgICBn
bEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlwZSBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcjsKKyAg
ICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEVHlwZSBmcmFtZWJ1ZmZlclRleHR1cmUyRDsKKyAgICBn
bEdlbkJ1ZmZlcnNUeXBlIGdlbkJ1ZmZlcnM7CisgICAgZ2xHZW5lcmF0ZU1pcG1hcFR5cGUgZ2Vu
ZXJhdGVNaXBtYXA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNUeXBlIGdlbkZyYW1lYnVmZmVyczsK
KyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNUeXBlIGdlblJlbmRlcmJ1ZmZlcnM7CisgICAgZ2xHZXRB
Y3RpdmVBdHRyaWJUeXBlIGdldEFjdGl2ZUF0dHJpYjsKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1U
eXBlIGdldEFjdGl2ZVVuaWZvcm07CisgICAgZ2xHZXRBdHRyaWJMb2NhdGlvblR5cGUgZ2V0QXR0
cmliTG9jYXRpb247CisgICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdlR5cGUgZ2V0QnVmZmVyUGFy
YW1ldGVyaXY7CisgICAgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdlR5cGUg
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXY7CisgICAgZ2xHZXRQcm9ncmFtSW5m
b0xvZ1R5cGUgZ2V0UHJvZ3JhbUluZm9Mb2c7CisgICAgZ2xHZXRQcm9ncmFtaXZUeXBlIGdldFBy
b2dyYW1pdjsKKyAgICBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2VHlwZSBnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpdjsKKyAgICBnbEdldFNoYWRlckluZm9Mb2dUeXBlIGdldFNoYWRlcklu
Zm9Mb2c7CisgICAgZ2xHZXRTaGFkZXJpdlR5cGUgZ2V0U2hhZGVyaXY7CisgICAgZ2xHZXRTaGFk
ZXJTb3VyY2VUeXBlIGdldFNoYWRlclNvdXJjZTsKKyAgICBnbEdldFVuaWZvcm1mdlR5cGUgZ2V0
VW5pZm9ybWZ2OworICAgIGdsR2V0VW5pZm9ybWl2VHlwZSBnZXRVbmlmb3JtaXY7CisgICAgZ2xH
ZXRVbmlmb3JtTG9jYXRpb25UeXBlIGdldFVuaWZvcm1Mb2NhdGlvbjsKKyAgICBnbEdldFZlcnRl
eEF0dHJpYmZ2VHlwZSBnZXRWZXJ0ZXhBdHRyaWJmdjsKKyAgICBnbEdldFZlcnRleEF0dHJpYml2
VHlwZSBnZXRWZXJ0ZXhBdHRyaWJpdjsKKyAgICBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2VHlw
ZSBnZXRWZXJ0ZXhBdHRyaWJQb2ludGVydjsKKyAgICBnbElzQnVmZmVyVHlwZSBpc0J1ZmZlcjsK
KyAgICBnbElzRnJhbWVidWZmZXJUeXBlIGlzRnJhbWVidWZmZXI7CisgICAgZ2xJc1Byb2dyYW1U
eXBlIGlzUHJvZ3JhbTsKKyAgICBnbElzUmVuZGVyYnVmZmVyVHlwZSBpc1JlbmRlcmJ1ZmZlcjsK
KyAgICBnbElzU2hhZGVyVHlwZSBpc1NoYWRlcjsKKyAgICBnbExpbmtQcm9ncmFtVHlwZSBsaW5r
UHJvZ3JhbTsKKyAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VUeXBlIHJlbmRlcmJ1ZmZlclN0b3Jh
Z2U7CisgICAgZ2xTaGFkZXJTb3VyY2VUeXBlIHNoYWRlclNvdXJjZTsKKyAgICBnbFN0ZW5jaWxG
dW5jU2VwYXJhdGVUeXBlIHN0ZW5jaWxGdW5jU2VwYXJhdGU7CisgICAgZ2xTdGVuY2lsTWFza1Nl
cGFyYXRlVHlwZSBzdGVuY2lsTWFza1NlcGFyYXRlOworICAgIGdsU3RlbmNpbE9wU2VwYXJhdGVU
eXBlIHN0ZW5jaWxPcFNlcGFyYXRlOworICAgIGdsVW5pZm9ybTFmVHlwZSB1bmlmb3JtMWY7Cisg
ICAgZ2xVbmlmb3JtMWZ2VHlwZSB1bmlmb3JtMWZ2OworICAgIGdsVW5pZm9ybTFpVHlwZSB1bmlm
b3JtMWk7CisgICAgZ2xVbmlmb3JtMWl2VHlwZSB1bmlmb3JtMWl2OworICAgIGdsVW5pZm9ybTJm
VHlwZSB1bmlmb3JtMmY7CisgICAgZ2xVbmlmb3JtMmZ2VHlwZSB1bmlmb3JtMmZ2OworICAgIGds
VW5pZm9ybTJpVHlwZSB1bmlmb3JtMmk7CisgICAgZ2xVbmlmb3JtMml2VHlwZSB1bmlmb3JtMml2
OworICAgIGdsVW5pZm9ybTNmVHlwZSB1bmlmb3JtM2Y7CisgICAgZ2xVbmlmb3JtM2Z2VHlwZSB1
bmlmb3JtM2Z2OworICAgIGdsVW5pZm9ybTNpVHlwZSB1bmlmb3JtM2k7CisgICAgZ2xVbmlmb3Jt
M2l2VHlwZSB1bmlmb3JtM2l2OworICAgIGdsVW5pZm9ybTRmVHlwZSB1bmlmb3JtNGY7CisgICAg
Z2xVbmlmb3JtNGZ2VHlwZSB1bmlmb3JtNGZ2OworICAgIGdsVW5pZm9ybTRpVHlwZSB1bmlmb3Jt
NGk7CisgICAgZ2xVbmlmb3JtNGl2VHlwZSB1bmlmb3JtNGl2OworICAgIGdsVW5pZm9ybU1hdHJp
eDJmdlR5cGUgdW5pZm9ybU1hdHJpeDJmdjsKKyAgICBnbFVuaWZvcm1NYXRyaXgzZnZUeXBlIHVu
aWZvcm1NYXRyaXgzZnY7CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2VHlwZSB1bmlmb3JtTWF0cml4
NGZ2OworICAgIGdsVXNlUHJvZ3JhbVR5cGUgdXNlUHJvZ3JhbTsKKyAgICBnbFZhbGlkYXRlUHJv
Z3JhbVR5cGUgdmFsaWRhdGVQcm9ncmFtOworICAgIGdsVmVydGV4QXR0cmliMWZUeXBlIHZlcnRl
eEF0dHJpYjFmOworICAgIGdsVmVydGV4QXR0cmliMWZ2VHlwZSB2ZXJ0ZXhBdHRyaWIxZnY7Cisg
ICAgZ2xWZXJ0ZXhBdHRyaWIyZlR5cGUgdmVydGV4QXR0cmliMmY7CisgICAgZ2xWZXJ0ZXhBdHRy
aWIyZnZUeXBlIHZlcnRleEF0dHJpYjJmdjsKKyAgICBnbFZlcnRleEF0dHJpYjNmVHlwZSB2ZXJ0
ZXhBdHRyaWIzZjsKKyAgICBnbFZlcnRleEF0dHJpYjNmdlR5cGUgdmVydGV4QXR0cmliM2Z2Owor
ICAgIGdsVmVydGV4QXR0cmliNGZUeXBlIHZlcnRleEF0dHJpYjRmOworICAgIGdsVmVydGV4QXR0
cmliNGZ2VHlwZSB2ZXJ0ZXhBdHRyaWI0ZnY7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyVHlw
ZSB2ZXJ0ZXhBdHRyaWJQb2ludGVyOworCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgbV9hdHRyczsKKyAgICBRR0xXaWRnZXQqIG1fZ2xXaWRnZXQ7CisgICAgR0x1aW50IG1fdGV4
dHVyZTsKKyAgICBHTHVpbnQgbV9tYWluRmJvOworICAgIEdMdWludCBtX2N1cnJlbnRGYm87Cisg
ICAgR0x1aW50IG1fZGVwdGhCdWZmZXI7CisgICAgUUltYWdlIG1fcGl4ZWxzOworICAgIExpc3RI
YXNoU2V0PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGljRXJyb3JzOworCitwcml2YXRlOgorCisg
ICAgdm9pZCogZ2V0UHJvY0FkZHJlc3MoY29uc3QgU3RyaW5nJiBwcm9jKTsKKyAgICBib29sIG1f
Y29udGV4dFZhbGlkOworfTsKKworI2lmIGRlZmluZWQgKFFUX09QRU5HTF9FU18yKSAKKyNkZWZp
bmUgR0VUX1BST0NfQUREUkVTUyhQcm9jKSBQcm9jCisjZWxzZQorI2RlZmluZSBHRVRfUFJPQ19B
RERSRVNTKFByb2MpIHJlaW50ZXJwcmV0X2Nhc3Q8UHJvYyMjVHlwZT4oZ2V0UHJvY0FkZHJlc3Mo
I1Byb2MpKTsKKyNlbmRpZgorIAorR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKKyAg
ICA6IG1fYXR0cnMoYXR0cnMpCisgICAgLCBtX2dsV2lkZ2V0KDApCisgICAgLCBtX3RleHR1cmUo
MCkKKyAgICAsIG1fbWFpbkZibygwKQorICAgICwgbV9jdXJyZW50RmJvKDApCisgICAgLCBtX2Rl
cHRoQnVmZmVyKDApCisgICAgLCBtX2NvbnRleHRWYWxpZCh0cnVlKQoreworICAgIG1fYXR0cnMu
YWxwaGEgPSB0cnVlOworICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOworICAgIG1fYXR0cnMuc3Rl
bmNpbCA9IGZhbHNlOworICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgbV9hdHRy
cy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlOworCisgICAgUUdMRm9ybWF0IGZvcm1hdDsKKwor
ICAgIGZvcm1hdC5zZXREZXB0aCh0cnVlKTsKKyAgICBmb3JtYXQuc2V0U2FtcGxlQnVmZmVycyh0
cnVlKTsKKyAgICBmb3JtYXQuc2V0U3RlbmNpbChmYWxzZSk7CisKKyAgICBtX2dsV2lkZ2V0ID0g
bmV3IFFHTFdpZGdldChmb3JtYXQpOworICAgIGlmICghbV9nbFdpZGdldC0+aXNWYWxpZCgpKSB7
CisgICAgICAgIExPR19FUlJPUigiR3JhcGhpY3NDb250ZXh0M0Q6IFFHTFdpZGdldCBkb2VzIG5v
dCBoYXZlIGEgdmFsaWQgY29udGV4dCIpOworICAgICAgICBtX2NvbnRleHRWYWxpZCA9IGZhbHNl
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKworICAgIGNvbnN0IFFHTENvbnRleHQqIGN0eCA9IG1fZ2xXaWRnZXQtPmNvbnRleHQoKTsK
KworICAgIGFjdGl2ZVRleHR1cmUgPSBHRVRfUFJPQ19BRERSRVNTKGdsQWN0aXZlVGV4dHVyZSk7
CisgICAgYXR0YWNoU2hhZGVyID0gR0VUX1BST0NfQUREUkVTUyhnbEF0dGFjaFNoYWRlcik7Cisg
ICAgYmluZEF0dHJpYkxvY2F0aW9uID0gR0VUX1BST0NfQUREUkVTUyhnbEJpbmRBdHRyaWJMb2Nh
dGlvbik7CisgICAgYmluZEJ1ZmZlciA9IEdFVF9QUk9DX0FERFJFU1MoZ2xCaW5kQnVmZmVyKTsK
KyAgICBiaW5kRnJhbWVidWZmZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsQmluZEZyYW1lYnVmZmVy
KTsKKyAgICBiaW5kUmVuZGVyYnVmZmVyID0gR0VUX1BST0NfQUREUkVTUyhnbEJpbmRSZW5kZXJi
dWZmZXIpOworICAgIGJsZW5kQ29sb3IgPSBHRVRfUFJPQ19BRERSRVNTKGdsQmxlbmRDb2xvcik7
CisgICAgYmxlbmRFcXVhdGlvblNlcGFyYXRlID0gR0VUX1BST0NfQUREUkVTUyhnbEJsZW5kRXF1
YXRpb25TZXBhcmF0ZSk7CisgICAgYmxlbmRGdW5jU2VwYXJhdGUgPSBHRVRfUFJPQ19BRERSRVNT
KGdsQmxlbmRGdW5jU2VwYXJhdGUpOworICAgIGJ1ZmZlckRhdGEgPSBHRVRfUFJPQ19BRERSRVNT
KGdsQnVmZmVyRGF0YSk7CisgICAgYnVmZmVyU3ViRGF0YSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xC
dWZmZXJTdWJEYXRhKTsKKyAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzID0gR0VUX1BST0NfQURE
UkVTUyhnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMpOworICAgIGNvbXBpbGVTaGFkZXIgPSBHRVRf
UFJPQ19BRERSRVNTKGdsQ29tcGlsZVNoYWRlcik7CisgICAgY3JlYXRlUHJvZ3JhbSA9IEdFVF9Q
Uk9DX0FERFJFU1MoZ2xDcmVhdGVQcm9ncmFtKTsKKyAgICBjcmVhdGVTaGFkZXIgPSBHRVRfUFJP
Q19BRERSRVNTKGdsQ3JlYXRlU2hhZGVyKTsKKyAgICBkZWxldGVCdWZmZXJzID0gR0VUX1BST0Nf
QUREUkVTUyhnbERlbGV0ZUJ1ZmZlcnMpOworICAgIGRlbGV0ZUZyYW1lYnVmZmVycyA9IEdFVF9Q
Uk9DX0FERFJFU1MoZ2xEZWxldGVGcmFtZWJ1ZmZlcnMpOworICAgIGRlbGV0ZVByb2dyYW0gPSBH
RVRfUFJPQ19BRERSRVNTKGdsRGVsZXRlUHJvZ3JhbSk7CisgICAgZGVsZXRlUmVuZGVyYnVmZmVy
cyA9IEdFVF9QUk9DX0FERFJFU1MoZ2xEZWxldGVSZW5kZXJidWZmZXJzKTsKKyAgICBkZWxldGVT
aGFkZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsRGVsZXRlU2hhZGVyKTsKKyAgICBkZXRhY2hTaGFk
ZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsRGV0YWNoU2hhZGVyKTsKKyAgICBkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkgPSBHRVRfUFJPQ19BRERSRVNTKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KTsKKyAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xFbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheSk7CisgICAgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIgPSBHRVRf
UFJPQ19BRERSRVNTKGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOworICAgIGZyYW1lYnVmZmVy
VGV4dHVyZTJEID0gR0VUX1BST0NfQUREUkVTUyhnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKTsKKyAg
ICBnZW5CdWZmZXJzID0gR0VUX1BST0NfQUREUkVTUyhnbEdlbkJ1ZmZlcnMpOworICAgIGdlbmVy
YXRlTWlwbWFwID0gR0VUX1BST0NfQUREUkVTUyhnbEdlbmVyYXRlTWlwbWFwKTsKKyAgICBnZW5G
cmFtZWJ1ZmZlcnMgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2VuRnJhbWVidWZmZXJzKTsKKyAgICBn
ZW5SZW5kZXJidWZmZXJzID0gR0VUX1BST0NfQUREUkVTUyhnbEdlblJlbmRlcmJ1ZmZlcnMpOwor
ICAgIGdldEFjdGl2ZUF0dHJpYiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRBY3RpdmVBdHRyaWIp
OworICAgIGdldEFjdGl2ZVVuaWZvcm0gPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0QWN0aXZlVW5p
Zm9ybSk7CisgICAgZ2V0QXR0cmliTG9jYXRpb24gPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0QXR0
cmliTG9jYXRpb24pOworICAgIGdldEJ1ZmZlclBhcmFtZXRlcml2ID0gR0VUX1BST0NfQUREUkVT
UyhnbEdldEJ1ZmZlclBhcmFtZXRlcml2KTsKKyAgICBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdik7CisgICAgZ2V0UHJvZ3JhbUluZm9Mb2cgPSBHRVRfUFJPQ19BRERSRVNTKGds
R2V0UHJvZ3JhbUluZm9Mb2cpOworICAgIGdldFByb2dyYW1pdiA9IEdFVF9QUk9DX0FERFJFU1Mo
Z2xHZXRQcm9ncmFtaXYpOworICAgIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2ID0gR0VUX1BS
T0NfQUREUkVTUyhnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KTsKKyAgICBnZXRTaGFkZXJJ
bmZvTG9nID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFNoYWRlckluZm9Mb2cpOworICAgIGdldFNo
YWRlcml2ID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFNoYWRlcml2KTsKKyAgICBnZXRTaGFkZXJT
b3VyY2UgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0U2hhZGVyU291cmNlKTsKKyAgICBnZXRVbmlm
b3JtZnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0VW5pZm9ybWZ2KTsKKyAgICBnZXRVbmlmb3Jt
aXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0VW5pZm9ybWl2KTsKKyAgICBnZXRVbmlmb3JtTG9j
YXRpb24gPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0VW5pZm9ybUxvY2F0aW9uKTsKKyAgICBnZXRW
ZXJ0ZXhBdHRyaWJmdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRWZXJ0ZXhBdHRyaWJmdik7Cisg
ICAgZ2V0VmVydGV4QXR0cmliaXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0VmVydGV4QXR0cmli
aXYpOworICAgIGdldFZlcnRleEF0dHJpYlBvaW50ZXJ2ID0gR0VUX1BST0NfQUREUkVTUyhnbEdl
dFZlcnRleEF0dHJpYlBvaW50ZXJ2KTsKKyAgICBpc0J1ZmZlciA9IEdFVF9QUk9DX0FERFJFU1Mo
Z2xJc0J1ZmZlcik7CisgICAgaXNGcmFtZWJ1ZmZlciA9IEdFVF9QUk9DX0FERFJFU1MoZ2xJc0Zy
YW1lYnVmZmVyKTsKKyAgICBpc1Byb2dyYW0gPSBHRVRfUFJPQ19BRERSRVNTKGdsSXNQcm9ncmFt
KTsKKyAgICBpc1JlbmRlcmJ1ZmZlciA9IEdFVF9QUk9DX0FERFJFU1MoZ2xJc1JlbmRlcmJ1ZmZl
cik7CisgICAgaXNTaGFkZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsSXNTaGFkZXIpOworICAgIGxp
bmtQcm9ncmFtID0gR0VUX1BST0NfQUREUkVTUyhnbExpbmtQcm9ncmFtKTsKKyAgICByZW5kZXJi
dWZmZXJTdG9yYWdlID0gR0VUX1BST0NfQUREUkVTUyhnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UpOwor
ICAgIHNoYWRlclNvdXJjZSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xTaGFkZXJTb3VyY2UpOworICAg
IHN0ZW5jaWxGdW5jU2VwYXJhdGUgPSBHRVRfUFJPQ19BRERSRVNTKGdsU3RlbmNpbEZ1bmNTZXBh
cmF0ZSk7CisgICAgc3RlbmNpbE1hc2tTZXBhcmF0ZSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xTdGVu
Y2lsTWFza1NlcGFyYXRlKTsKKyAgICBzdGVuY2lsT3BTZXBhcmF0ZSA9IEdFVF9QUk9DX0FERFJF
U1MoZ2xTdGVuY2lsT3BTZXBhcmF0ZSk7CisgICAgdW5pZm9ybTFmID0gR0VUX1BST0NfQUREUkVT
UyhnbFVuaWZvcm0xZik7CisgICAgdW5pZm9ybTFmdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlm
b3JtMWZ2KTsKKyAgICB1bmlmb3JtMWkgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTFpKTsK
KyAgICB1bmlmb3JtMWl2ID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm0xaXYpOworICAgIHVu
aWZvcm0yZiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtMmYpOworICAgIHVuaWZvcm0yZnYg
PSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTJmdik7CisgICAgdW5pZm9ybTJpID0gR0VUX1BS
T0NfQUREUkVTUyhnbFVuaWZvcm0yaSk7CisgICAgdW5pZm9ybTJpdiA9IEdFVF9QUk9DX0FERFJF
U1MoZ2xVbmlmb3JtMml2KTsKKyAgICB1bmlmb3JtM2YgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5p
Zm9ybTNmKTsKKyAgICB1bmlmb3JtM2Z2ID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm0zZnYp
OworICAgIHVuaWZvcm0zaSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtM2kpOworICAgIHVu
aWZvcm0zaXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTNpdik7CisgICAgdW5pZm9ybTRm
ID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm00Zik7CisgICAgdW5pZm9ybTRmdiA9IEdFVF9Q
Uk9DX0FERFJFU1MoZ2xVbmlmb3JtNGZ2KTsKKyAgICB1bmlmb3JtNGkgPSBHRVRfUFJPQ19BRERS
RVNTKGdsVW5pZm9ybTRpKTsKKyAgICB1bmlmb3JtNGl2ID0gR0VUX1BST0NfQUREUkVTUyhnbFVu
aWZvcm00aXYpOworICAgIHVuaWZvcm1NYXRyaXgyZnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5p
Zm9ybU1hdHJpeDJmdik7CisgICAgdW5pZm9ybU1hdHJpeDNmdiA9IEdFVF9QUk9DX0FERFJFU1Mo
Z2xVbmlmb3JtTWF0cml4M2Z2KTsKKyAgICB1bmlmb3JtTWF0cml4NGZ2ID0gR0VUX1BST0NfQURE
UkVTUyhnbFVuaWZvcm1NYXRyaXg0ZnYpOworICAgIHVzZVByb2dyYW0gPSBHRVRfUFJPQ19BRERS
RVNTKGdsVXNlUHJvZ3JhbSk7CisgICAgdmFsaWRhdGVQcm9ncmFtID0gR0VUX1BST0NfQUREUkVT
UyhnbFZhbGlkYXRlUHJvZ3JhbSk7CisgICAgdmVydGV4QXR0cmliMWYgPSBHRVRfUFJPQ19BRERS
RVNTKGdsVmVydGV4QXR0cmliMWYpOworICAgIHZlcnRleEF0dHJpYjFmdiA9IEdFVF9QUk9DX0FE
RFJFU1MoZ2xWZXJ0ZXhBdHRyaWIxZnYpOworICAgIHZlcnRleEF0dHJpYjJmID0gR0VUX1BST0Nf
QUREUkVTUyhnbFZlcnRleEF0dHJpYjJmKTsKKyAgICB2ZXJ0ZXhBdHRyaWIyZnYgPSBHRVRfUFJP
Q19BRERSRVNTKGdsVmVydGV4QXR0cmliMmZ2KTsKKyAgICB2ZXJ0ZXhBdHRyaWIzZiA9IEdFVF9Q
Uk9DX0FERFJFU1MoZ2xWZXJ0ZXhBdHRyaWIzZik7CisgICAgdmVydGV4QXR0cmliM2Z2ID0gR0VU
X1BST0NfQUREUkVTUyhnbFZlcnRleEF0dHJpYjNmdik7CisgICAgdmVydGV4QXR0cmliNGYgPSBH
RVRfUFJPQ19BRERSRVNTKGdsVmVydGV4QXR0cmliNGYpOworICAgIHZlcnRleEF0dHJpYjRmdiA9
IEdFVF9QUk9DX0FERFJFU1MoZ2xWZXJ0ZXhBdHRyaWI0ZnYpOworICAgIHZlcnRleEF0dHJpYlBv
aW50ZXIgPSBHRVRfUFJPQ19BRERSRVNTKGdsVmVydGV4QXR0cmliUG9pbnRlcik7CisKKyAgICBp
ZiAoIW1fY29udGV4dFZhbGlkKSB7CisgICAgICAgIExPR19FUlJPUigiR3JhcGhpY3NDb250ZXh0
M0Q6IEFsbCBuZWVkZWQgT3BlbkdMIGV4dGVuc2lvbnMgYXJlIG5vdCBhdmFpbGFibGUiKTsKKyAg
ICAgICAgbV9jb250ZXh0VmFsaWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRl
cmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGdsVGV4UGFy
YW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgZ2xU
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsK
KyAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RP
X0VER0UpOworICAgIGdsVGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAgZ2xCaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisKKyAgICBnZW5GcmFtZWJ1
ZmZlcnMoLyogY291bnQgKi8gMSwgJm1fbWFpbkZibyk7CisgICAgbV9jdXJyZW50RmJvID0gbV9t
YWluRmJvOworCisgICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgbV9tYWluRmJvKTsKKworICAgIGdlblJlbmRlcmJ1ZmZlcnMoLyogY291bnQgKi8gMSwg
Jm1fZGVwdGhCdWZmZXIpOworICAgIGJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNf
MikKKyAgICByZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNiwgLyogd2lkdGggKi8gMSwg
LyogaGVpZ2h0ICovIDEpOworI2Vsc2UKKyAgICByZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05F
TlQyNCwgLyogd2lkdGggKi8gMSwgLyogaGVpZ2h0ICovIDEpOworI2VuZGlmCisKKyAgICBiaW5k
UmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworIAorICAg
IGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRB
Q0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsK
KyAgICBnbENsZWFyQ29sb3IoLyogcmVkICovIDAsIC8qIGdyZWVuICovIDAsIC8qIGJsdWUgKi8g
MCwgLyogYWxwaGEgKi8gMCk7CisKKyAgICBpZiAoY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUl9DT01QTEVURSkgeworICAgICAgICBMT0dfRVJST1IoIkdyYXBoaWNzQ29udGV4dDNEOiBX
YXNuJ3QgYWJsZSB0byBjcmVhdGUgdGhlIG1haW4gZnJhbWVidWZmZXIiKTsKKyAgICAgICAgbV9j
b250ZXh0VmFsaWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkKK3sKKyAgICBkZWxldGUgbV9nbFdpZGdl
dDsKKyAgICBtX2dsV2lkZ2V0ID0gMDsKK30KKwordm9pZCogR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6Z2V0UHJvY0FkZHJlc3MoY29uc3QgU3RyaW5nJiBwcm9jKQoreworICAgIFN0cmluZyBl
eHRbM10gPSB7ICIiLCAiQVJCIiwgIkVYVCIgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgaSsrKSB7CisgICAgICAgIFN0cmluZyBuYW1lV2l0aEV4dCA9IHByb2MgKyBleHRbaV07CisK
KyAgICAgICAgdm9pZCogYWRkciA9IG1fZ2xXaWRnZXQtPmNvbnRleHQoKS0+Z2V0UHJvY0FkZHJl
c3MobmFtZVdpdGhFeHQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGlmIChhZGRyKSAKKyAgICAg
ICAgICAgIHJldHVybiBhZGRyOworICAgIH0KKworICAgIExPR19FUlJPUigiR3JhcGhpY3NDb250
ZXh0M0Q6IERpZCBub3QgZmluZCBHTCBmdW5jdGlvbiAlcyIsIHByb2MudXRmOCgpLmRhdGEoKSk7
CisgICAgbV9jb250ZXh0VmFsaWQgPSBmYWxzZTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKK3sKKyAgICBPd25QdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzKSk7CisgICAgcmV0dXJu
IGNvbnRleHQtPm1faW50ZXJuYWwgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7Cit9CisKK0dyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRycykKKyAgICA6IG1faW50ZXJuYWwobmV3IEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwoYXR0cnMpKQoreworICAgIGlmICghbV9pbnRlcm5hbC0+aXNDb250ZXh0VmFsaWQoKSkgCisg
ICAgICAgIG1faW50ZXJuYWwgPSAwOworfQorCitHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNz
Q29udGV4dDNEKCkKK3sKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0Nv
bnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCit7CisgICAgcmV0dXJuIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQ7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm1f
dGV4dHVyZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50
KCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
CisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOworICAg
IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CisKKyAgICBtX2lu
dGVybmFsLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X2ludGVybmFsLT5tX21haW5GYm8pOworCisgICAgZ2xSZWFkUGl4ZWxzKC8qIHggKi8gMCwgLyog
eSAqLyAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1faW50ZXJuYWwtPm1f
cGl4ZWxzLmJpdHMoKSk7CisKKyAgICBRUGFpbnRlciogcCA9IGltYWdlQnVmZmVyLT5jb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgIHAtPmRyYXdJbWFnZSgvKiB4ICovIDAsIC8qIHkg
Ki8gMCwgbV9pbnRlcm5hbC0+bV9waXhlbHMudHJhbnNmb3JtZWQoUU1hdHJpeCgpLnJvdGF0ZSgx
ODApKSk7CisKKyAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2ludGVybmFsLT5tX2N1cnJlbnRGYm8pOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICgoKHdpZHRoID09
IG1fY3VycmVudFdpZHRoKSAmJiAoaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkpIHx8ICghbV9p
bnRlcm5hbCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdp
ZHRoOworICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIG1faW50ZXJuYWwtPm1f
cGl4ZWxzID0gUUltYWdlKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIFFJbWFnZTo6
Rm9ybWF0X0FSR0IzMik7CisKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworCisgICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
bV9pbnRlcm5hbC0+bV90ZXh0dXJlKTsKKyAgICBnbFRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIC8qIGxldmVsICovIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCB3
aWR0aCwgaGVpZ2h0LCAvKiBib3JkZXIgKi8gMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAvKiBkYXRhICovIDApOworICAgIGdsQmlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworICAgCisgICAgbV9p
bnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9pbnRlcm5hbC0+bV9tYWluRmJvKTsKKyAgICBtX2ludGVybmFsLT5iaW5kUmVuZGVyYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1faW50ZXJuYWwtPm1fZGVwdGhCdWZm
ZXIpOworI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgcmVuZGVyYnVmZmVyU3RvcmFn
ZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworI2Vsc2UKKyAgICByZW5kZXJidWZmZXJT
dG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9DT01QT05FTlQyNCwgd2lkdGgsIGhlaWdodCk7CisjZW5kaWYKKyAgICBtX2ludGVy
bmFsLT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDAp
OworICAgIAorICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQw
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9pbnRlcm5hbC0+bV90ZXh0dXJlLCAw
KTsKKyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2ludGVybmFsLT5tX2RlcHRoQnVmZmVy
KTsKKworICAgIEdMZW51bSBzdGF0dXMgPSBtX2ludGVybmFsLT5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUik7CisgICAgaWYgKHN0YXR1cyAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJHcmFwaGljc0NvbnRleHQzRDogV2Fzbid0IGFibGUgdG8gcmVzaGFwZSB0aGUgbWFpbiBm
cmFtZWJ1ZmZlciIpOworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIGds
Q2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOworICAgIGdsRmx1c2go
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBs
b25nIHRleHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBz
aGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
YXR0YWNoU2hhZGVyKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCAoR0x1aW50KSBzaGFkZXIt
Pm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJpbmRBdHRyaWJMb2NhdGlv
bigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0
YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5iaW5kQnVmZmVyKHRhcmdldCwgYnVm
ZmVyID8gKEdMdWludCkgYnVmZmVyLT5vYmplY3QoKSA6IDApOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJh
bWVidWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPm1fY3VycmVudEZibyA9IChidWZmZXIgJiYgYnVmZmVy
LT5vYmplY3QoKSkgPyAoR0x1aW50KSBidWZmZXItPm9iamVjdCgpIDogbV9pbnRlcm5hbC0+bV9t
YWluRmJvOworICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG1faW50ZXJu
YWwtPm1fY3VycmVudEZibyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5k
ZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJi
dWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyID8gKEdM
dWludCkgcmVuZGVyYnVmZmVyLT5vYmplY3QoKSA6IDApOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0
ZXh0dXJlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUgPyAoR0x1aW50KSB0ZXh0dXJlLT5vYmpl
Y3QoKSA6IDApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKGRvdWJs
ZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQmxlbmRDb2xvcihz
dGF0aWNfY2FzdDxmbG9hdD4ocmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGJsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbih1bnNpZ25lZCBsb25nIG1vZGUpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEJsZW5k
RXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRp
b25TZXBhcmF0ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9kZUFscGhh
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3Is
IHVuc2lnbmVkIGxvbmcgZGZhY3RvcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIGdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOworfSAgICAg
ICAKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUodW5zaWduZWQg
bG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhh
LCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdC
LCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBs
b25nIHVzYWdlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIC8qIGRhdGEgKi8gMCwg
dXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBXZWJHTEFycmF5KiBhcnJheSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sK
KyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPmJ1ZmZlckRhdGEodGFyZ2V0LCBhcnJheS0+Ynl0ZUxlbmd0aCgpLCBhcnJheS0+YmFz
ZUFkZHJlc3MoKSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJT
dWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgV2ViR0xBcnJheSogYXJy
YXkpCit7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmxlbmd0aCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheS0+Ynl0ZUxl
bmd0aCgpLCBhcnJheS0+YmFzZUFkZHJlc3MoKSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1
cm4gbV9pbnRlcm5hbC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKGRvdWJsZSByLCBkb3VibGUgZywgZG91Ymxl
IGIsIGRvdWJsZSBhKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgZ2xDbGVhckNvbG9yKHN0YXRpY19jYXN0PGZsb2F0PihyKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGcpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYiksIHN0YXRpY19jYXN0PGZsb2F0PihhKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQ2xl
YXIobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoZG91Ymxl
IGRlcHRoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisj
aWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKKyAgICBnbENsZWFyRGVwdGhmKGRlcHRoKTsKKyNl
bHNlCisgICAgZ2xDbGVhckRlcHRoKGRlcHRoKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhclN0ZW5jaWwobG9uZyBzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBi
bHVlLCBib29sIGFscGhhKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgZ2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIp
Cit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5jb21waWxlU2hhZGVyKChHTHVpbnQpIHNoYWRl
ci0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2Uy
RCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5h
bGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0LCBsb25nIGJvcmRlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25n
IGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xDdWxsRmFj
ZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKHVuc2lnbmVk
IGxvbmcgZnVuYykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIGdsRGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpk
ZXB0aE1hc2soYm9vbCBmbGFnKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgZ2xEZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcikKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworI2lmIGRlZmluZWQoUVRfT1BFTkdM
X0VTXzIpCisgICAgZ2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7CisjZWxzZQorICAgIGdsRGVw
dGhSYW5nZSh6TmVhciwgekZhcik7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRl
cikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZXRh
Y2hTaGFkZXIoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIChHTHVpbnQpIHNoYWRlci0+b2Jq
ZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKHVuc2lnbmVkIGxv
bmcgY2FwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgZ2xEaXNhYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0Fy
cmF5cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERyYXdBcnJheXMo
bW9kZSwgZmlyc3QsIGNvdW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0Vs
ZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQg
bG9uZyB0eXBlLCBsb25nIG9mZnNldCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIGdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUodW5zaWduZWQgbG9uZyBjYXApCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEVuYWJsZShj
YXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5k
ZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xGaW5pc2goKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xGbHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgV2ViR0xSZW5kZXJidWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIgPyAoR0x1
aW50KSBidWZmZXItPm9iamVjdCgpIDogMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1
cmUsIGxvbmcgbGV2ZWwpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSA/IChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpIDog
MCwgbGV2ZWwpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UodW5zaWdu
ZWQgbG9uZyBtb2RlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgZ2xGcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdlbmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2VuZXJhdGVNaXBt
YXAodGFyZ2V0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmli
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0tPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50
IG1heExlbmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1
aW50Pihwcm9ncmFtLT5vYmplY3QoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklC
VVRFX01BWF9MRU5HVEgsICZtYXhMZW5ndGgpOworCisgICAgR0xjaGFyIG5hbWVbbWF4TGVuZ3Ro
XTsgCisgICAgR0xzaXplaSBuYW1lTGVuZ3RoOworICAgIEdMaW50IHNpemU7CisgICAgR0xlbnVt
IHR5cGU7CisKKyAgICBtX2ludGVybmFsLT5nZXRBY3RpdmVBdHRyaWIoc3RhdGljX2Nhc3Q8R0x1
aW50Pihwcm9ncmFtLT5vYmplY3QoKSksIGluZGV4LCBtYXhMZW5ndGgsICZuYW1lTGVuZ3RoLCAm
c2l6ZSwgJnR5cGUsIG5hbWUpOworCisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7Cisg
ICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisgICAgCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3Jt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0tPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50
IG1heExlbmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1
aW50Pihwcm9ncmFtLT5vYmplY3QoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9S
TV9NQVhfTEVOR1RILCAmbWF4TGVuZ3RoKTsKKworICAgIEdMY2hhciBuYW1lW21heExlbmd0aF07
CisgICAgR0xzaXplaSBuYW1lTGVuZ3RoOworICAgIEdMaW50IHNpemU7CisgICAgR0xlbnVtIHR5
cGU7CisKKyAgICBtX2ludGVybmFsLT5nZXRBY3RpdmVVbmlmb3JtKHN0YXRpY19jYXN0PEdMdWlu
dD4ocHJvZ3JhbS0+b2JqZWN0KCkpLCBpbmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNp
emUsICZ0eXBlLCBuYW1lKTsKKworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAg
IGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3Jh
bSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEF0dHJpYkxvY2F0aW9u
KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5tX2F0dHJzOworfQorCit1
bnNpZ25lZCBsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1f
aW50ZXJuYWwtPm1fc3ludGhldGljRXJyb3JzLnNpemUoKSA+IDApIHsKKyAgICAgICAgTGlzdEhh
c2hTZXQ8dW5zaWduZWQgbG9uZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2ludGVybmFsLT5tX3N5bnRo
ZXRpY0Vycm9ycy5iZWdpbigpOworICAgICAgICB1bnNpZ25lZCBsb25nIGVyciA9ICppdGVyOwor
ICAgICAgICBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7CisgICAg
ICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xHZXRFcnJvcigpOworfQorCitTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gU3RyaW5nKChjb25z
dCBjaGFyKikgZ2xHZXRTdHJpbmcobmFtZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEhpbnQodGFyZ2V0
LCBtb2RlKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoV2ViR0xCdWZm
ZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0
dXJuIG1faW50ZXJuYWwtPmlzQnVmZmVyKChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkpOworfQor
Citib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4g
Z2xJc0VuYWJsZWQoY2FwKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1
ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNGcmFtZWJ1ZmZl
cigoR0x1aW50KSBmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjppc1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmICghcHJv
Z3JhbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzUHJvZ3JhbSgo
R0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAg
aWYgKCFyZW5kZXJidWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFs
LT5pc1JlbmRlcmJ1ZmZlcigoR0x1aW50KSByZW5kZXJidWZmZXItPm9iamVjdCgpKTsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sK
KyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwt
PmlzU2hhZGVyKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dDNEOjppc1RleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIGlmICgh
dGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsSXNUZXh0dXJlKChHTHVpbnQp
IHRleHR1cmUtPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdp
ZHRoKGRvdWJsZSB3aWR0aCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIGdsTGluZVdpZHRoKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dy
YW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+bGlua1Byb2dyYW0oKEdMdWludCkgcHJv
Z3JhbS0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3Jl
aSh1bnNpZ25lZCBsb25nIHBhcmFtTmFtZSwgbG9uZyBwYXJhbSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsUGl4ZWxTdG9yZWkocGFyYW1OYW1l
LCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoZG91
YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CisgICAgZ2xQb2x5Z29uT2Zmc2V0KHN0YXRpY19jYXN0PGZsb2F0Pihm
YWN0b3IpLCBzdGF0aWNfY2FzdDxmbG9hdD4odW5pdHMpKTsKK30KKworUGFzc1JlZlB0cjxXZWJH
TEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9y
bWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICAKKyAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSB8fCBmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpCisgICAg
ICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eT4gYXJyYXkgPSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUod2lkdGggKiBoZWlnaHQg
KiA0KTsKKyAgICBnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCAoR0x2b2lkKikgYXJyYXktPmRhdGEoKSk7CisgICAgcmV0dXJuIGFycmF5OyAgICAKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+cmVuZGVyYnVmZmVyU3Rv
cmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVy
dCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGds
U2FtcGxlQ292ZXJhZ2Uoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKSwgaW52ZXJ0KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3Nvcihsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRl
ciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsK
KyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAg
Ly8gRm9yY2UgdGhlIHVzZSBvZiBHTFNMIDEuMDoKKyAgICAvLyBodHRwczovL2N2cy5raHJvbm9z
Lm9yZy9zdm4vcmVwb3MvcmVnaXN0cnkvdHJ1bmsvcHVibGljL3dlYmdsL2RvYy9zcGVjL1dlYkdM
LXNwZWMuaHRtbCM0LjQKKyAgICAvLyBGSVhNRTogTGluZXMgYmVnaW5uaW5nIHdpdGggIiN2ZXJz
aW9uIiBzaG91bGQgYmUgc3RyaXBwZWQgb3V0LgorCisgICAgU3RyaW5nIHByZXBhcmVkOworICAg
CisgICAgcHJlcGFyZWQuYXBwZW5kKCIjdmVyc2lvbiAxMDBcbiIpOworI2lmIGRlZmluZWQoUVRf
T1BFTkdMX0VTXzIpCisgICAgcHJlcGFyZWQuYXBwZW5kKCJwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDtcbiIpOworI2VuZGlmCisgICAgcHJlcGFyZWQuYXBwZW5kKHN0cmluZyk7CisKKyAgICBDU3Ry
aW5nIHByZXBhcmVkQ1MgPSBwcmVwYXJlZC51dGY4KCk7CisgICAgY29uc3QgY2hhciogZGF0YSA9
IHByZXBhcmVkQ1MuZGF0YSgpOworICAgIGludCBsZW5ndGggPSBwcmVwYXJlZC5sZW5ndGgoKTsK
KyAgICBtX2ludGVybmFsLT5zaGFkZXJTb3VyY2UoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwg
LyogY291bnQgKi8gMSwgJmRhdGEsICZsZW5ndGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBs
b25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25l
ZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5zdGVuY2ls
RnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsU3RlbmNpbE1hc2sobWFzayk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWdu
ZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5zdGVuY2lsTWFza1NlcGFy
YXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3Ao
dW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpw
YXNzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25n
IGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5z
dGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
cGFyYW1OYW1lLCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIGdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBhcmFtTmFtZSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwYXJhbU5hbWUsIGludCB2YWx1
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGds
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBhcmFtTmFtZSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVl
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZihsb25nIGxvY2F0aW9u
LCBmbG9hdCB2MCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwg
aW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT51bmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB2
MCwgZmxvYXQgdjEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFy
cmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKGxvbmcgbG9jYXRpb24sIGZs
b2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtM2YobG9jYXRpb24sIHYw
LCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KGxvbmcg
bG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtM2Z2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00
Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPnVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwg
aW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBtX2ludGVybmFsLT51bmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShsb25nIGxvY2F0aW9uLCBpbnQgdjAp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT51bmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJu
YWwtPnVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTJpKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+dW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIGludCogYXJyYXksIGludCBzaXplKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGludCB2
MikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgaW50KiBhcnJheSwgaW50
IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBtX2ludGVybmFsLT51bmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGlu
dCB2MSwgaW50IHYyLCBpbnQgdjMpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwg
djIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihsb25nIGxv
Y2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00aXYobG9jYXRpb24s
IHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJp
eDJmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIGFycmF5LCBpbnQgc2l6
ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJy
YXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KGxvbmcg
bG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogYXJyYXksIGludCBzaXplKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtTWF0
cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAg
QVNTRVJUKHByb2dyYW0pOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dXNlUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5v
YmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIAorICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
dmFsaWRhdGVQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9h
dCB2MCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjFmKGluZHgsIHYwKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFy
cmF5KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMWZ2KGluZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2
MCwgZmxvYXQgdjEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIyZihpbmR4LCB2MCwgdjEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCogYXJyYXkpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIyZnYoaW5keCwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGlu
ZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIzZihp
bmR4LCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFycmF5KQoreworICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0
cmliM2Z2KGluZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYy
LCBmbG9hdCB2MykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxv
bmcgaW5keCwgZmxvYXQqIGFycmF5KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliNGZ2KGluZHgsIGFycmF5
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNp
Z25lZCBsb25nIGluZHgsIGludCBzaXplLCBpbnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNp
Z25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRy
aWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xWaWV3cG9ydChzdGF0aWNfY2FzdDxHTGludD4o
eCksIHN0YXRpY19jYXN0PEdMaW50Pih5KSwgc3RhdGljX2Nhc3Q8R0xzaXplaT4od2lkdGgpLCBz
dGF0aWNfY2FzdDxHTHNpemVpPihoZWlnaHQpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwYXJhbU5hbWUsIHVuc2lnbmVkIGNoYXIqIHZh
bHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
Z2xHZXRCb29sZWFudihwYXJhbU5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgcGFyYW1OYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0QnVmZmVyUGFyYW1ldGVyaXYo
dGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcGFyYW1OYW1lLCBmbG9hdCogdmFsdWUpCit7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEdldEZsb2F0dihw
YXJhbU5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwYXJhbU5hbWUsIGludCogdmFsdWUpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1l
bnQsIHBhcmFtTmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJ
bnRlZ2Vydih1bnNpZ25lZCBsb25nIHBhcmFtTmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0SW50ZWdlcnYocGFy
YW1OYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1p
dihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgcGFyYW1OYW1lLCBpbnQqIHZh
bHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBwYXJh
bU5hbWUsIHZhbHVlKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFt
SW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50IGxlbmd0aDsKKyAgICBtX2ludGVybmFs
LT5nZXRQcm9ncmFtaXYoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIEdyYXBoaWNzQ29udGV4
dDNEOjpJTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworCisgICAgR0xzaXplaSBzaXplOworCisg
ICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAo
IWluZm8pCisgICAgICAgIHJldHVybiAiIjsKKworICAgIG1faW50ZXJuYWwtPmdldFByb2dyYW1J
bmZvTG9nKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBsZW5ndGgsICZzaXplLCBpbmZvKTsK
KworICAgIFN0cmluZyByZXN1bHQoaW5mbyk7CisgICAgZmFzdEZyZWUoaW5mbyk7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwYXJhbU5h
bWUsIGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX2ludGVybmFsLT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQs
IHBhcmFtTmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFk
ZXJpdihXZWJHTFNoYWRlciogc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBhcmFtTmFtZSwgaW50KiB2
YWx1ZSkKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2KChHTHVpbnQpIHNo
YWRlci0+b2JqZWN0KCksIHBhcmFtTmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgR0xpbnQgbGVuZ3Ro
OworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCks
IEdyYXBoaWNzQ29udGV4dDNEOjpJTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworCisgICAgR0xz
aXplaSBzaXplOworICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0
aCk7CisgICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBtX2ludGVybmFs
LT5nZXRTaGFkZXJJbmZvTG9nKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNp
emUsIGluZm8pOworCisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZv
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIEdMaW50IGxlbmd0aDsKKyAgICBtX2lu
dGVybmFsLT5nZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6U0hBREVSX1NPVVJDRV9MRU5HVEgsICZsZW5ndGgpOworCisgICAgR0xzaXplaSBz
aXplOworICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7Cisg
ICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBtX2ludGVybmFsLT5nZXRT
aGFkZXJTb3VyY2UoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5m
byk7CisKKyAgICBTdHJpbmcgcmVzdWx0KGluZm8pOworICAgIGZhc3RGcmVlKGluZm8pOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFy
YW1ldGVyZnYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcGFyYW1OYW1lLCBm
bG9hdCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBhcmFtTmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0VGV4UGFyYW1l
dGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybWZ2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwg
ZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VW5pZm9ybWZ2KChHTHVpbnQpIHByb2dyYW0tPm9iamVj
dCgpLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRV
bmlmb3JtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVl
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+Z2V0VW5pZm9ybWl2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBsb2NhdGlv
biwgdmFsdWUpOworfQorCitsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRp
b24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNT
RVJUKHByb2dyYW0pOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldFVuaWZvcm1Mb2NhdGlvbigoR0x1aW50
KSBwcm9ncmFtLT5vYmplY3QoKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5z
aWduZWQgbG9uZyBwYXJhbU5hbWUsIGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFZlcnRleEF0dHJp
YmZ2KGluZGV4LCBwYXJhbU5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VmVydGV4QXR0cmliaXYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBw
YXJhbU5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcGFy
YW1OYW1lLCB2YWx1ZSk7Cit9CisKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0
dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBhcmFtTmFtZSkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIAorICAg
IHZvaWQqIHBvaW50ZXI7CisgICAgbV9pbnRlcm5hbC0+Z2V0VmVydGV4QXR0cmliUG9pbnRlcnYo
aW5kZXgsIHBhcmFtTmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGxvbmc+KHBvaW50ZXIpOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQs
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWdu
ZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgZ2xUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIElt
YWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQoreworICAgIEFT
U0VSVChpbWFnZSk7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgR0x1aW50IGZvcm1h
dDsKKyAgICBHTHVpbnQgaW50ZXJuYWxGb3JtYXQ7CisKKyAgICBpZiAoIWV4dHJhY3RJbWFnZURh
dGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZp
bnRlcm5hbEZvcm1hdCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJHcmFwaGljc0NvbnRleHQzRDo6
dGV4SW1hZ2UyRDogY291bGQgbm90IGV4dHJhY3QgSW1hZ2UgZGF0YSIpOworICAgICAgICByZXR1
cm4gLTE7CisgICAgfQorCisgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Rm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAKKyAgICAgICAgICAgICAg
ICAgLyogYm9yZGVyICovIDAsIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIGltYWdlRGF0YS5kYXRhKCkpOworCisgICAgcmV0dXJuIDA7Cit9CisgICAgCitpbnQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBs
ZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMp
Cit7CisgICAgZ2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIEltYWdlKiBpbWFnZSwgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQoreworICAgIEFTU0VSVChpbWFnZSk7CisK
KyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIEdMdWludCBmb3JtYXQ7CisgICAg
R0x1aW50IGludGVybmFsRm9ybWF0OworCisgICAgaWYgKCFleHRyYWN0SW1hZ2VEYXRhKGltYWdl
LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgaW1hZ2VEYXRhLCAmZm9ybWF0LCAmaW50ZXJuYWxG
b3JtYXQpKSB7CisgICAgICAgIExPR19FUlJPUigiR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1Yklt
YWdlMkQ6IGNvdWxkIG5vdCBleHRyYWN0IEltYWdlIGRhdGEiKTsKKyAgICAgICAgcmV0dXJuIC0x
OworICAgIH0KKworICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2Zm
LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAKKyAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgaW1hZ2VEYXRhLmRhdGEo
KSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZUJ1ZmZlcigpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBHTHVpbnQgaGFuZGxlOworICAgIG1faW50ZXJuYWwtPmdlbkJ1ZmZlcnMoLyogY291
bnQgKi8gMSwgJmhhbmRsZSk7CisgICAgcmV0dXJuIGhhbmRsZTsKK30KKwordW5zaWduZWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIEdMdWludCBoYW5kbGU7CisgICAgbV9pbnRl
cm5hbC0+Z2VuRnJhbWVidWZmZXJzKC8qIGNvdW50ICovIDEsICZoYW5kbGUpOworICAgIHJldHVy
biBoYW5kbGU7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFt
KCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJl
dHVybiBtX2ludGVybmFsLT5jcmVhdGVQcm9ncmFtKCk7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgR0x1aW50IGhhbmRsZTsKKyAgICBtX2ludGVybmFs
LT5nZW5SZW5kZXJidWZmZXJzKC8qIGNvdW50ICovIDEsICZoYW5kbGUpOworICAgIHJldHVybiBo
YW5kbGU7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIodW5z
aWduZWQgbG9uZyB0eXBlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFH
TUVOVF9TSEFERVIpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUiA6IEdyYXBo
aWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgR0x1aW50IGhhbmRsZTsKKyAgICBnbEdlblRleHR1cmVzKDEsICZo
YW5kbGUpOworICAgIHJldHVybiBoYW5kbGU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdp
ZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVCdWZmZXJzKDEsICZi
dWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcih1
bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVi
dWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKHVuc2ln
bmVkIHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIodW5zaWduZWQgcmVuZGVyYnVmZmVy
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9p
bnRlcm5hbC0+ZGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKHVuc2lnbmVkIHNoYWRlcikKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwt
PmRlbGV0ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKK30K
KworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyhpbnQgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKEdMYnl0ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHNob3J0KTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihHTHVzaG9ydCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgor
ICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9JTlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGZsb2F0
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpCit7
CisgICAgbV9pbnRlcm5hbC0+bV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKworYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3Rv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5
QWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogaGFzQWxw
aGFDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3Aq
IG5lZWRlZEFscGhhT3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50KiBmb3JtYXQpCit7CisgICAgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQgPSAo
IXByZW11bHRpcGx5QWxwaGEpID8gCisgICAgICAgIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMiA6Cisg
ICAgICAgIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOworIAorICAgIFFQaXht
YXAqIG5hdGl2ZVBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOyAK
KworICAgICpoYXNBbHBoYUNoYW5uZWwgPSB0cnVlOworICAgICpuZWVkZWRBbHBoYU9wID0ga0Fs
cGhhRG9Ob3RoaW5nOworICAgICpmb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKwor
ICAgIFFJbWFnZSBuYXRpdmVJbWFnZSA9IG5hdGl2ZVBpeG1hcC0+dG9JbWFnZSgpLmNvbnZlcnRU
b0Zvcm1hdChpbWFnZUZvcm1hdCk7CisgICAgb3V0cHV0VmVjdG9yLmFwcGVuZChuYXRpdmVJbWFn
ZS5iaXRzKCksIG5hdGl2ZUltYWdlLmJ5dGVDb3VudCgpKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3Bw
CmluZGV4IGQ2MGYwOWMuLmU2ZmRmNjEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnNl
dHRpbmdzLmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKQEAgLTE1OCw2
ICsxNTgsMTMgQEAgdm9pZCBRV2ViU2V0dGluZ3NQcml2YXRlOjphcHBseSgpCiAKICAgICAgICAg
c2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHZhbHVlKTsKICNlbmRp
ZgorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgICAgIHZhbHVlID0gYXR0cmlidXRlcy52YWx1
ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxl
ZCkpOworCisgICAgICAgIHNldHRpbmdzLT5zZXRXZWJHTEVuYWJsZWQodmFsdWUpOworI2VuZGlm
CisgCiAgICAgICAgIHZhbHVlID0gYXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OkphdmFz
Y3JpcHRDYW5PcGVuV2luZG93cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2xvYmFsLT5hdHRyaWJ1dGVzLnZhbHVlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9w
ZW5XaW5kb3dzKSk7CiAgICAgICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRv
d3NBdXRvbWF0aWNhbGx5KHZhbHVlKTsKQEAgLTQwMSw2ICs0MDgsNyBAQCBRV2ViU2V0dGluZ3M6
OlFXZWJTZXR0aW5ncygpCiAgICAgZC0+YXR0cmlidXRlcy5pbnNlcnQoUVdlYlNldHRpbmdzOjpM
b2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxzLCBmYWxzZSk7CiAgICAgZC0+YXR0cmlidXRl
cy5pbnNlcnQoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NGaWxlVXJscywgdHJ1
ZSk7CiAgICAgZC0+YXR0cmlidXRlcy5pbnNlcnQoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENv
bXBvc2l0aW5nRW5hYmxlZCwgZmFsc2UpOworICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJT
ZXR0aW5nczo6V2ViR0xFbmFibGVkLCBmYWxzZSk7CiAgICAgZC0+b2ZmbGluZVN0b3JhZ2VEZWZh
dWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7CiAgICAgZC0+ZGVmYXVsdFRleHRFbmNvZGluZyA9
IFFMYXRpbjFTdHJpbmcoImlzby04ODU5LTEiKTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9B
cGkvcXdlYnNldHRpbmdzLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5oCmluZGV4IGIx
ZjVjZjIuLjI5YzAxYjYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgK
KysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaApAQCAtNzAsNyArNzAsOCBAQCBwdWJs
aWM6CiAgICAgICAgIExvY2FsQ29udGVudENhbkFjY2Vzc0ZpbGVVcmxzLAogICAgICAgICBEbnNQ
cmVmZXRjaEVuYWJsZWQsCiAgICAgICAgIFhTU0F1ZGl0b3JFbmFibGVkLAotICAgICAgICBBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZAorICAgICAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZCwKKyAgICAgICAgV2ViR0xFbmFibGVkCiAgICAgfTsKICAgICBlbnVtIFdlYkdyYXBo
aWMgewogICAgICAgICBNaXNzaW5nSW1hZ2VHcmFwaGljLApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0
L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMmQxYTQ4My4uYzVlNmU0MSAx
MDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDItMjMgIEphcmtrbyBTYWtraW5lbiAgPGphcmtrby5z
YWtraW5lbkB0aWV0by5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUXQgV2ViR0wgc3VwcG9ydAorCisgICAgICAgIEFkZHMgZW5hYmxpbmcgYW5k
IGRpc2FibGluZyBvZiBXZWJHTCBzdXBwb3J0IHRvIFFXZWJTZXR0aW5ncy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MTUzCisKKyAgICAgICAgKiBB
cGkvcXdlYnNldHRpbmdzLmNwcDoKKyAgICAgICAgKFFXZWJTZXR0aW5nc1ByaXZhdGU6OmFwcGx5
KToKKyAgICAgICAgKFFXZWJTZXR0aW5nczo6UVdlYlNldHRpbmdzKToKKyAgICAgICAgKiBBcGkv
cXdlYnNldHRpbmdzLmg6CisKIDIwMTAtMDItMjMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bn
b29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGUw
NjY1MTkuLjMwOTE4YTIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9X
ZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wMi0yMyAgSmFya2tv
IFNha2tpbmVuICA8amFya2tvLnNha2tpbmVuQHRpZXRvLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBRdCBXZWJHTCBzdXBwb3J0CisKKyAgICAg
ICAgQWRkcyB0b2dnbGluZyBvZiBXZWJHTCBzdXBwb3J0IHRvIFF0TGF1bmNoZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTE1MworCisgICAgICAg
ICogUXRMYXVuY2hlci9tYWluLmNwcDoKKyAgICAgICAgKExhdW5jaGVyV2luZG93Ojp0b2dnbGVX
ZWJHTCk6CisgICAgICAgIChMYXVuY2hlcldpbmRvdzo6c2V0dXBVSSk6CisKIDIwMTAtMDItMjMg
IExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvUXRMYXVuY2hlci9tYWluLmNwcCBiL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5j
cHAKaW5kZXggMTIwM2NlNy4uY2Y4YTY5YSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvUXRMYXVu
Y2hlci9tYWluLmNwcAorKysgYi9XZWJLaXRUb29scy9RdExhdW5jaGVyL21haW4uY3BwCkBAIC0x
MTYsNiArMTE2LDcgQEAgcHJvdGVjdGVkIHNsb3RzOgogCiAgICAgdm9pZCBzZXRUb3VjaE1vY2tp
bmcoYm9vbCBvbik7CiAgICAgdm9pZCB0b2dnbGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGJvb2wg
dG9nZ2xlKTsKKyAgICB2b2lkIHRvZ2dsZVdlYkdMKGJvb2wgdG9nZ2xlKTsKICAgICB2b2lkIGlu
aXRpYWxpemVWaWV3KGJvb2wgdXNlR3JhcGhpY3NWaWV3ID0gZmFsc2UpOwogCiBwdWJsaWMgc2xv
dHM6CkBAIC00NDUsNiArNDQ2LDExIEBAIHZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCB0b2dnbGUpCiAgICAgcGFnZSgpLT5zZXR0aW5ncygpLT5z
ZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwg
dG9nZ2xlKTsKIH0KIAordm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlV2ViR0woYm9vbCB0b2dn
bGUpCit7CisgICAgcGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdz
OjpXZWJHTEVuYWJsZWQsIHRvZ2dsZSk7Cit9CisKIHZvaWQgTGF1bmNoZXJXaW5kb3c6OmluaXRp
YWxpemVWaWV3KGJvb2wgdXNlR3JhcGhpY3NWaWV3KQogewogICAgIGRlbGV0ZSBtX3ZpZXc7CkBA
IC01NTQsNiArNTYwLDEwIEBAIHZvaWQgTGF1bmNoZXJXaW5kb3c6OnNldHVwVUkoKQogICAgIHRv
Z2dsZUdyYXBoaWNzVmlldy0+c2V0Q2hlY2thYmxlKHRydWUpOwogICAgIHRvZ2dsZUdyYXBoaWNz
Vmlldy0+c2V0Q2hlY2tlZChmYWxzZSk7CiAKKyAgICBRQWN0aW9uKiB0b2dnbGVXZWJHTCA9IHRv
b2xzTWVudS0+YWRkQWN0aW9uKCJUb2dnbGUgV2ViR0wiLCB0aGlzLCBTTE9UKHRvZ2dsZVdlYkdM
KGJvb2wpKSk7CisgICAgdG9nZ2xlV2ViR0wtPnNldENoZWNrYWJsZSh0cnVlKTsKKyAgICB0b2dn
bGVXZWJHTC0+c2V0Q2hlY2tlZChmYWxzZSk7CisKICAgICBRQWN0aW9uKiB0b2dnbGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nID0gZ3JhcGhpY3NWaWV3TWVudS0+YWRkQWN0aW9uKCJUb2dnbGUgQWNj
ZWxlcmF0ZWQgQ29tcG9zaXRpbmciLCB0aGlzLCBTTE9UKHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoYm9vbCkpKTsKICAgICB0b2dnbGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nLT5zZXRDaGVj
a2FibGUodHJ1ZSk7CiAgICAgdG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3NpdGluZy0+c2V0Q2hlY2tl
ZChmYWxzZSk7Cg==
</data>
<flag name="review"
          id="32236"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49475</attachid>
            <date>2010-02-25 04:53:41 -0800</date>
            <delta_ts>2010-02-25 07:07:03 -0800</delta_ts>
            <desc>Qt WebGL support</desc>
            <filename>qt-webgl-support-11.diff</filename>
            <type>text/plain</type>
            <size>77996</size>
            <attacher name="Jarkko Sakkinen">jarkko.sakkinen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjZhYjlmZi4uNWFjMGVlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjkgQEAKKzIwMTAtMDItMjUgIEphcmtrbyBTYWtr
aW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXQgV2ViR0wgc3VwcG9ydAorCisgICAgICAgIEFk
ZHMgR3JhcGhpY3NDb250ZXh0M0QgUXRXZWJLaXQgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTE1MworCisgICAgICAgICog
V2ViQ29yZS5wcmk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6Z2V0UHJvY0FkZHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGlj
c0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVu
ZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2spOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpk
ZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2Fi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0Fy
cmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2gpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0J1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpw
aXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cG9seWdv
bk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNv
bXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZm
ZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVD
b3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2Npc3Nvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
M2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00Zik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRl
cmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hh
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisKIDIw
MTAtMDItMjQgIE5pY2hvbGFzIFlvdW5nICA8bmljaG9sYXMueW91bmdAbm9raWEuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5wcmkgYi9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IDI3ZjFiYjYuLmZjNzlmOGQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnByaQpA
QCAtMjg3LDggKzI4NywxNyBAQCBJRExfQklORElOR1MgKz0gXAogICAgIGh0bWwvY2FudmFzL0Nh
bnZhc1BhdHRlcm4uaWRsIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCisg
ICAgaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbCBcCisgICAgaHRtbC9jYW52YXMvV2Vi
R0xCdWZmZXIuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlk
bCBcCisgICAgaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5pZGwgXAorICAgIGh0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5pZGwgXAorICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVy
LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbCBcCisgICAg
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRsIFwKICAgICBodG1sL2NhbnZhcy9XZWJHTFNob3J0
QXJyYXkuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaWRsIFwKKyAgICBodG1s
L2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgXAogICAgIGh0bWwvY2FudmFzL1dlYkdM
VW5zaWduZWRCeXRlQXJyYXkuaWRsIFwKICAgICBodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50
QXJyYXkuaWRsIFwKICAgICBodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5pZGwg
XApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
aW5kZXggYTEwNjgzZC4uMmU4YzQ2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybwor
KysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yNjg4LDYgKzI2ODgsODcgQEAgU09VUkNFUyAr
PSBcCiB9CiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVOQUJMRV8zRF9DQU5WQVM9MSkgeworUVQg
Kz0gb3BlbmdsCitIRUFERVJTICs9IFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlIZWxwZXIuaCBcCisJYmlu
ZGluZ3MvanMvSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yLmggXAorCWJpbmRpbmdzL2pzL0pT
V2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEludEFy
cmF5Q29uc3RydWN0b3IuaCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1
Y3Rvci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rv
ci5oIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmgg
XAorCWJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oIFwK
KwlodG1sL2NhbnZhcy9DYW52YXNDb250ZXh0QXR0cmlidXRlcy5oIFwKKwlodG1sL2NhbnZhcy9D
YW52YXNPYmplY3QuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmggXAorCWh0bWwv
Y2FudmFzL1dlYkdMQXJyYXlCdWZmZXIuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xBcnJheS5oIFwK
KwlodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJh
eS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggXAorCWh0bWwvY2Fu
dmFzL1dlYkdMRmxvYXRBcnJheS5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgg
XAorCWh0bWwvY2FudmFzL1dlYkdMR2V0SW5mby5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTEludEFy
cmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oIFwKKwlodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmJ1ZmZlci5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBc
CisJaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCBcCisJaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFy
cmF5LmggXAorCWh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oIFwKKwlodG1sL2NhbnZhcy9XZWJH
TFVuaWZvcm1Mb2NhdGlvbi5oIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5
LmggXAorCWh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5oIFwKKwlodG1sL2NhbnZh
cy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oIAorCitTT1VSQ0VTICs9IFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xBcnJheUN1c3Rv
bS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAor
CWJpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9K
U1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTEZs
b2F0QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMSW50QXJyYXlDb25zdHJ1
Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2ViR0xJbnRBcnJheUN1c3RvbS5jcHAgXAorCWJp
bmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBcCisJYmluZGluZ3Mv
anMvSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAorCWJpbmRpbmdzL2pzL0pTV2Vi
R0xTaG9ydEFycmF5Q3VzdG9tLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0
ZUFycmF5Q29uc3RydWN0b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRCeXRl
QXJyYXlDdXN0b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRJbnRBcnJheUNv
bnN0cnVjdG9yLmNwcCBcCisJYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0
b20uY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0
b3IuY3BwIFwKKwliaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNw
cCBcCisJaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuY3BwIFwKKyAgICBodG1s
L2NhbnZhcy9DYW52YXNPYmplY3QuY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVy
LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xBcnJheS5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdM
QnVmZmVyLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuY3BwIFwKKwlodG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xGbG9h
dEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAgXAorCWh0bWwv
Y2FudmFzL1dlYkdMR2V0SW5mby5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuY3Bw
IFwKKwlodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmJ1ZmZlci5jcHAgXAorCWh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAg
XAorCWh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xTaG9y
dEFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcCBcCisJaHRtbC9jYW52
YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwIFwKKwlodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5LmNwcCBcCisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmNwcCBc
CisJaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuY3BwIFwKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIFwKKworfQorCisKIGluY2x1ZGUoJCRQV0QvLi4v
V2ViS2l0L3F0L0FwaS9oZWFkZXJzLnByaSkKIGluY2x1ZGUoLi4vaW5jbHVkZS9RdFdlYktpdC9j
bGFzc2hlYWRlcnMucHJpKQogSEVBREVSUyArPSAkJFdFQktJVF9BUElfSEVBREVSUwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDBhNDFkYzYu
LmNmMWRmNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgKQEAgLTQ0LDYgKzQ0LDEzIEBAIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRDsKIGNvbnN0ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIE51bGxQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEID0gMDsKIHR5cGVkZWYgR0x1aW50IFBsYXRmb3JtM0RPYmplY3Q7CiBj
b25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9ybTNET2JqZWN0ID0gMDsKKyNlbGlmIFBM
QVRGT1JNKFFUKQorI2luY2x1ZGUgPFF0T3BlbkdML1F0T3BlbkdMPgorCit0eXBlZGVmIHZvaWQq
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7Citjb25zdCAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCBOdWxsUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCA9IDA7Cit0eXBlZGVmIGludCBQbGF0
Zm9ybTNET2JqZWN0OworY29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iamVj
dCA9IDA7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOwog
Y29uc3QgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QgPSAwOwpAQCAtNzMsNyArODAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfTsK
IAogICAgIC8vIEZJWE1FOiBpZGVhbGx5IHRoaXMgd291bGQgYmUgdXNlZCBvbiBhbGwgcGxhdGZv
cm1zLgotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2lmIFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQ
TEFURk9STShRVCkKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOwogI2VuZGlm
CiAKQEAgLTQwOSw2ICs0MTYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZWxpZiBQTEFURk9S
TShDSFJPTUlVTSkKICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CiAgICAgICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZv
cm1UZXh0dXJlKCkgY29uc3Q7CisjZWxpZiBQTEFURk9STShRVCkKKyAgICAgICAgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgICAgIFBs
YXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7CiAjZWxzZQogICAgICAgICBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dCB7IHJldHVybiBOdWxsUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsgfQogICAgICAgICBQbGF0
Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIE51bGxQbGF0Zm9y
bTNET2JqZWN0OyB9CkBAIC03MDQsNyArNzE0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2Vu
ZGlmICAgICAgICAKIAogICAgICAgICAvLyBGSVhNRTogaWRlYWxseSB0aGlzIHdvdWxkIGJlIHVz
ZWQgb24gYWxsIHBsYXRmb3Jtcy4KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpZiBQTEFURk9S
TShDSFJPTUlVTSkgfHwgUExBVEZPUk0oUVQpCiAgICAgICAgIGZyaWVuZCBjbGFzcyBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOwogICAgICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbD4gbV9pbnRlcm5hbDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNWE1Nzk1OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTAsMCArMSwxNjI1IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMCBUaWV0byBDb3Jwb3JhdGlvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAgIAorICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICAgICAKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRl
ICJDYW52YXNPYmplY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKKyNpbmNs
dWRlICJXZWJHTEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKKyNpbmNsdWRlICJX
ZWJHTEZsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCisjaW5jbHVk
ZSAiV2ViR0xJbnRBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUg
IldlYkdMUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgi
CisjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKKyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNp
bmNsdWRlICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmgiCisjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyNpZiAhZGVmaW5lZChHTGNoYXIpCit0eXBlZGVmIGNoYXIgR0xjaGFyOworI2VuZGlmCisKKyNp
ZiAhZGVmaW5lZChBUElFTlRSWSkKKyNkZWZpbmUgQVBJRU5UUlkKKyNlbmRpZgorCit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZKiBnbEFjdGl2ZVRleHR1cmVUeXBlKSAoR0xlbnVtKTsKK3R5cGVkZWYg
dm9pZCAoQVBJRU5UUlkqIGdsQXR0YWNoU2hhZGVyVHlwZSkgKEdMdWludCwgR0x1aW50KTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsQmluZEF0dHJpYkxvY2F0aW9uVHlwZSkgKEdMdWludCwg
R0x1aW50LCBjb25zdCBjaGFyKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJpbmRCdWZm
ZXJUeXBlKSAoR0xlbnVtLCBHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCaW5k
RnJhbWVidWZmZXJUeXBlKSAoR0xlbnVtLCBHTHVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSogZ2xCaW5kUmVuZGVyYnVmZmVyVHlwZSkgKEdMZW51bSwgR0x1aW50KTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkqIGdsQmxlbmRDb2xvclR5cGUpIChHTGNsYW1wZiwgR0xjbGFtcGYsIEdMY2xh
bXBmLCBHTGNsYW1wZik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEJsZW5kRXF1YXRpb25T
ZXBhcmF0ZVR5cGUpKEdMZW51bSwgR0xlbnVtKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGds
QmxlbmRGdW5jU2VwYXJhdGVUeXBlKShHTGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVu
dW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bEJ1ZmZlckRhdGFUeXBlKSAoR0xlbnVtLCBHTHNpemVpcHRyLCBjb25zdCBHTHZvaWQqLCBHTGVu
dW0pOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xCdWZmZXJTdWJEYXRhVHlwZSkgKEdMZW51
bSwgR0xpbnRwdHIsIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCopOwordHlwZWRlZiBHTGVudW0g
KEFQSUVOVFJZKiBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNUeXBlKSAoR0xlbnVtKTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkqIGdsQ29tcGlsZVNoYWRlclR5cGUpIChHTHVpbnQpOwordHlwZWRl
ZiBHTHVpbnQgKEFQSUVOVFJZKiBnbENyZWF0ZVByb2dyYW1UeXBlKSAoKTsKK3R5cGVkZWYgR0x1
aW50IChBUElFTlRSWSogZ2xDcmVhdGVTaGFkZXJUeXBlKSAoR0xlbnVtKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkqIGdsRGVsZXRlQnVmZmVyc1R5cGUpIChHTHNpemVpLCBjb25zdCBHTHVpbnQq
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsRGVsZXRlRnJhbWVidWZmZXJzVHlwZSkgKEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbERlbGV0
ZVByb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsRGVsZXRl
UmVuZGVyYnVmZmVyc1R5cGUpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCopOwordHlwZWRlZiB2
b2lkIChBUElFTlRSWSogZ2xEZWxldGVTaGFkZXJUeXBlKSAoR0x1aW50KTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkqIGdsRGV0YWNoU2hhZGVyVHlwZSkgKEdMdWludCwgR0x1aW50KTsKK3R5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkqIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWlu
dCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5VHlw
ZSkgKEdMdWludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyVHlwZSkgKEdMZW51bSwgR0xlbnVtLCBHTGVudW0sIEdMdWludCk7Cit0eXBlZGVmIHZv
aWQgKEFQSUVOVFJZKiBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEVHlwZSkgKEdMZW51bSwgR0xlbnVt
LCBHTGVudW0sIEdMdWludCwgR0xpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZW5C
dWZmZXJzVHlwZSkgKEdMc2l6ZWksIEdMdWludCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xHZW5lcmF0ZU1pcG1hcFR5cGUpIChHTGVudW0gdGFyZ2V0KTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsR2VuRnJhbWVidWZmZXJzVHlwZSkgKEdMc2l6ZWksIEdMdWludCopOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSogZ2xHZW5SZW5kZXJidWZmZXJzVHlwZSkgKEdMc2l6ZWksIEdMdWlu
dCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRBY3RpdmVBdHRyaWJUeXBlKSAoR0x1
aW50LCBHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkqLCBHTGludCosIEdMZW51bSosIEdMY2hhciop
OwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRBY3RpdmVVbmlmb3JtVHlwZSkgKEdMdWlu
dCwgR0x1aW50LCBHTHNpemVpLCBHTHNpemVpKiwgR0xpbnQqLCBHTGVudW0qLCBHTGNoYXIqKTsK
K3R5cGVkZWYgR0xpbnQgKEFQSUVOVFJZKiBnbEdldEF0dHJpYkxvY2F0aW9uVHlwZSkgKEdMdWlu
dCwgY29uc3QgY2hhciopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRCdWZmZXJQYXJh
bWV0ZXJpdlR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xpbnQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJ
RU5UUlkqIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZUeXBlKSAoR0xlbnVt
LCBHTGVudW0sIEdMZW51bSwgR0xpbnQqIHBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
KiBnbEdldFByb2dyYW1JbmZvTG9nVHlwZSkgKEdMdWludCwgR0xzaXplaSwgR0xzaXplaSosIGNo
YXIqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0UHJvZ3JhbWl2VHlwZSkgKEdMdWlu
dCwgR0xlbnVtLCBHTGludCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpdlR5cGUpIChHTGVudW0sIEdMZW51bSwgR0xpbnQqKTsKK3R5cGVkZWYg
dm9pZCAoQVBJRU5UUlkqIGdsR2V0U2hhZGVySW5mb0xvZ1R5cGUpIChHTHVpbnQsIEdMc2l6ZWks
IEdMc2l6ZWkqLCBjaGFyKik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbEdldFNoYWRlcml2
VHlwZSkgKEdMdWludCwgR0xlbnVtLCBHTGludCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xHZXRTaGFkZXJTb3VyY2VUeXBlKSAoR0x1aW50LCBHTHNpemVpLCBHTHNpemVpKiwgY2hhciop
OwordHlwZWRlZiBHTGludCAoQVBJRU5UUlkqIGdsR2V0VW5pZm9ybUxvY2F0aW9uVHlwZSkgKEdM
dWludCwgY29uc3QgY2hhciopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xHZXRVbmlmb3Jt
ZnZUeXBlKSAoR0x1aW50LCBHTGludCwgR0xmbG9hdCopOwordHlwZWRlZiB2b2lkIChBUElFTlRS
WSogZ2xHZXRVbmlmb3JtaXZUeXBlKSAoR0x1aW50LCBHTGludCwgR0xpbnQqKTsKK3R5cGVkZWYg
dm9pZCAoQVBJRU5UUlkqIGdsR2V0VmVydGV4QXR0cmliZnZUeXBlKSAoR0x1aW50LCBHTGVudW0s
IEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsR2V0VmVydGV4QXR0cmliaXZU
eXBlKSAoR0x1aW50LCBHTGVudW0sIEdMaW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBn
bEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2VHlwZSkgKEdMdWludCwgR0xlbnVtLCBHTHZvaWQqKik7
Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkqIGdsSXNCdWZmZXJUeXBlKSAoR0x1aW50KTsK
K3R5cGVkZWYgR0xib29sZWFuIChBUElFTlRSWSogZ2xJc0ZyYW1lYnVmZmVyVHlwZSkgKEdMdWlu
dCk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkqIGdsSXNQcm9ncmFtVHlwZSkgKEdMdWlu
dCk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoQVBJRU5UUlkqIGdsSXNSZW5kZXJidWZmZXJUeXBlKSAo
R0x1aW50KTsKK3R5cGVkZWYgR0xib29sZWFuIChBUElFTlRSWSogZ2xJc1NoYWRlclR5cGUpIChH
THVpbnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xMaW5rUHJvZ3JhbVR5cGUpIChHTHVp
bnQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xSZW5kZXJidWZmZXJTdG9yYWdlVHlwZSkg
KEdMZW51bSwgR0xlbnVtLCBHTHNpemVpLCBHTHNpemVpKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5U
UlkqIGdsU2hhZGVyU291cmNlVHlwZSkgKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hhcioqLCBj
b25zdCBHTGludCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xTdGVuY2lsRnVuY1NlcGFy
YXRlVHlwZSkgKEdMZW51bSwgR0xlbnVtLCBHTGludCwgR0x1aW50KTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkqIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZVR5cGUpIChHTGVudW0sIEdMdWludCk7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFN0ZW5jaWxPcFNlcGFyYXRlVHlwZSkgKEdMZW51bSwg
R0xlbnVtLCBHTGVudW0sIEdMZW51bSk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZv
cm0xZlR5cGUpIChHTGludCwgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVu
aWZvcm0xZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNvbnN0IEdMZmxvYXQqKTsKK3R5cGVkZWYg
dm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTFpVHlwZSkgKEdMaW50LCBHTGludCk7Cit0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0xaXZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNvbnN0
IEdMaW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0yZlR5cGUpIChHTGlu
dCwgR0xmbG9hdCwgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0y
ZnZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNvbnN0IEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9pZCAo
QVBJRU5UUlkqIGdsVW5pZm9ybTJpVHlwZSkgKEdMaW50LCBHTGludCwgR0xpbnQpOwordHlwZWRl
ZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtMml2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25z
dCBHTGludCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xVbmlmb3JtM2ZUeXBlKSAoR0xp
bnQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSog
Z2xVbmlmb3JtM2Z2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBjb25zdCBHTGZsb2F0Kik7Cit0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0zaVR5cGUpIChHTGludCwgR0xpbnQsIEdMaW50
LCBHTGludCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm0zaXZUeXBlKSAoR0xp
bnQsIEdMc2l6ZWksIGNvbnN0IEdMaW50Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVu
aWZvcm00ZlR5cGUpIChHTGludCwgR0xmbG9hdCwgR0xmbG9hdCwgR0xmbG9hdCwgR0xmbG9hdCk7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm00ZnZUeXBlKSAoR0xpbnQsIEdMc2l6
ZWksIGNvbnN0IEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybTRp
VHlwZSkgKEdMaW50LCBHTGludCwgR0xpbnQsIEdMaW50LCBHTGludCk7Cit0eXBlZGVmIHZvaWQg
KEFQSUVOVFJZKiBnbFVuaWZvcm00aXZUeXBlKSAoR0xpbnQsIEdMc2l6ZWksIGNvbnN0IEdMaW50
Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVuaWZvcm1NYXRyaXgyZnZUeXBlKSAoR0xp
bnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCopOwordHlwZWRlZiB2b2lkIChB
UElFTlRSWSogZ2xVbmlmb3JtTWF0cml4M2Z2VHlwZSkgKEdMaW50LCBHTHNpemVpLCBHTGJvb2xl
YW4sIGNvbnN0IEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVW5pZm9ybU1h
dHJpeDRmdlR5cGUpIChHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0Kik7
Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFVzZVByb2dyYW1UeXBlKSAoR0x1aW50KTsKK3R5
cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVmFsaWRhdGVQcm9ncmFtVHlwZSkgKEdMdWludCk7Cit0
eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjFmVHlwZSkgKEdMdWludCwgY29u
c3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJpYjFmdlR5
cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGds
VmVydGV4QXR0cmliMmZUeXBlKSAoR0x1aW50LCBjb25zdCBHTGZsb2F0LCBjb25zdCBHTGZsb2F0
KTsKK3R5cGVkZWYgdm9pZCAoQVBJRU5UUlkqIGdsVmVydGV4QXR0cmliMmZ2VHlwZSkgKEdMdWlu
dCwgY29uc3QgR0xmbG9hdCopOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xWZXJ0ZXhBdHRy
aWIzZlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdMZmxvYXQsIGNvbnN0IEdM
ZmxvYXQpOwordHlwZWRlZiB2b2lkIChBUElFTlRSWSogZ2xWZXJ0ZXhBdHRyaWIzZnZUeXBlKSAo
R0x1aW50LCBjb25zdCBHTGZsb2F0Kik7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRl
eEF0dHJpYjRmVHlwZSkgKEdMdWludCwgY29uc3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCwgY29u
c3QgR0xmbG9hdCwgY29uc3QgR0xmbG9hdCk7Cit0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZl
cnRleEF0dHJpYjRmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQqKTsKK3R5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkqIGdsVmVydGV4QXR0cmliUG9pbnRlclR5cGUpIChHTHVpbnQsIEdMaW50LCBH
TGVudW0sIEdMYm9vbGVhbiwgR0xzaXplaSwgY29uc3QgR0x2b2lkKik7CisKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWwgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpOworICAgIH5HcmFwaGlj
c0NvbnRleHQzREludGVybmFsKCk7CisKKyAgICBib29sIGlzQ29udGV4dFZhbGlkKCkgeyByZXR1
cm4gbV9jb250ZXh0VmFsaWQ7IH0KKworICAgIGdsQWN0aXZlVGV4dHVyZVR5cGUgYWN0aXZlVGV4
dHVyZTsKKyAgICBnbEF0dGFjaFNoYWRlclR5cGUgYXR0YWNoU2hhZGVyOworICAgIGdsQmluZEF0
dHJpYkxvY2F0aW9uVHlwZSBiaW5kQXR0cmliTG9jYXRpb247CisgICAgZ2xCaW5kQnVmZmVyVHlw
ZSBiaW5kQnVmZmVyOworICAgIGdsQmluZEZyYW1lYnVmZmVyVHlwZSBiaW5kRnJhbWVidWZmZXI7
CisgICAgZ2xCaW5kUmVuZGVyYnVmZmVyVHlwZSBiaW5kUmVuZGVyYnVmZmVyOworICAgIGdsQmxl
bmRDb2xvclR5cGUgYmxlbmRDb2xvcjsKKyAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZVR5cGUg
YmxlbmRFcXVhdGlvblNlcGFyYXRlOworICAgIGdsQmxlbmRGdW5jU2VwYXJhdGVUeXBlIGJsZW5k
RnVuY1NlcGFyYXRlOworICAgIGdsQnVmZmVyRGF0YVR5cGUgYnVmZmVyRGF0YTsKKyAgICBnbEJ1
ZmZlclN1YkRhdGFUeXBlIGJ1ZmZlclN1YkRhdGE7CisgICAgZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzVHlwZSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzOworICAgIGdsQ29tcGlsZVNoYWRlclR5cGUg
Y29tcGlsZVNoYWRlcjsKKyAgICBnbENyZWF0ZVByb2dyYW1UeXBlIGNyZWF0ZVByb2dyYW07Cisg
ICAgZ2xDcmVhdGVTaGFkZXJUeXBlIGNyZWF0ZVNoYWRlcjsKKyAgICBnbERlbGV0ZUJ1ZmZlcnNU
eXBlIGRlbGV0ZUJ1ZmZlcnM7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNUeXBlIGRlbGV0ZUZy
YW1lYnVmZmVyczsKKyAgICBnbERlbGV0ZVByb2dyYW1UeXBlIGRlbGV0ZVByb2dyYW07CisgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzVHlwZSBkZWxldGVSZW5kZXJidWZmZXJzOworICAgIGdsRGVs
ZXRlU2hhZGVyVHlwZSBkZWxldGVTaGFkZXI7CisgICAgZ2xEZXRhY2hTaGFkZXJUeXBlIGRldGFj
aFNoYWRlcjsKKyAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheVR5cGUgZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5OworICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXlUeXBlIGVuYWJsZVZl
cnRleEF0dHJpYkFycmF5OworICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJUeXBlIGZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRUeXBlIGZyYW1l
YnVmZmVyVGV4dHVyZTJEOworICAgIGdsR2VuQnVmZmVyc1R5cGUgZ2VuQnVmZmVyczsKKyAgICBn
bEdlbmVyYXRlTWlwbWFwVHlwZSBnZW5lcmF0ZU1pcG1hcDsKKyAgICBnbEdlbkZyYW1lYnVmZmVy
c1R5cGUgZ2VuRnJhbWVidWZmZXJzOworICAgIGdsR2VuUmVuZGVyYnVmZmVyc1R5cGUgZ2VuUmVu
ZGVyYnVmZmVyczsKKyAgICBnbEdldEFjdGl2ZUF0dHJpYlR5cGUgZ2V0QWN0aXZlQXR0cmliOwor
ICAgIGdsR2V0QWN0aXZlVW5pZm9ybVR5cGUgZ2V0QWN0aXZlVW5pZm9ybTsKKyAgICBnbEdldEF0
dHJpYkxvY2F0aW9uVHlwZSBnZXRBdHRyaWJMb2NhdGlvbjsKKyAgICBnbEdldEJ1ZmZlclBhcmFt
ZXRlcml2VHlwZSBnZXRCdWZmZXJQYXJhbWV0ZXJpdjsKKyAgICBnbEdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcml2VHlwZSBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
djsKKyAgICBnbEdldFByb2dyYW1JbmZvTG9nVHlwZSBnZXRQcm9ncmFtSW5mb0xvZzsKKyAgICBn
bEdldFByb2dyYW1pdlR5cGUgZ2V0UHJvZ3JhbWl2OworICAgIGdsR2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXZUeXBlIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2OworICAgIGdsR2V0U2hhZGVy
SW5mb0xvZ1R5cGUgZ2V0U2hhZGVySW5mb0xvZzsKKyAgICBnbEdldFNoYWRlcml2VHlwZSBnZXRT
aGFkZXJpdjsKKyAgICBnbEdldFNoYWRlclNvdXJjZVR5cGUgZ2V0U2hhZGVyU291cmNlOworICAg
IGdsR2V0VW5pZm9ybWZ2VHlwZSBnZXRVbmlmb3JtZnY7CisgICAgZ2xHZXRVbmlmb3JtaXZUeXBl
IGdldFVuaWZvcm1pdjsKKyAgICBnbEdldFVuaWZvcm1Mb2NhdGlvblR5cGUgZ2V0VW5pZm9ybUxv
Y2F0aW9uOworICAgIGdsR2V0VmVydGV4QXR0cmliZnZUeXBlIGdldFZlcnRleEF0dHJpYmZ2Owor
ICAgIGdsR2V0VmVydGV4QXR0cmliaXZUeXBlIGdldFZlcnRleEF0dHJpYml2OworICAgIGdsR2V0
VmVydGV4QXR0cmliUG9pbnRlcnZUeXBlIGdldFZlcnRleEF0dHJpYlBvaW50ZXJ2OworICAgIGds
SXNCdWZmZXJUeXBlIGlzQnVmZmVyOworICAgIGdsSXNGcmFtZWJ1ZmZlclR5cGUgaXNGcmFtZWJ1
ZmZlcjsKKyAgICBnbElzUHJvZ3JhbVR5cGUgaXNQcm9ncmFtOworICAgIGdsSXNSZW5kZXJidWZm
ZXJUeXBlIGlzUmVuZGVyYnVmZmVyOworICAgIGdsSXNTaGFkZXJUeXBlIGlzU2hhZGVyOworICAg
IGdsTGlua1Byb2dyYW1UeXBlIGxpbmtQcm9ncmFtOworICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZVR5cGUgcmVuZGVyYnVmZmVyU3RvcmFnZTsKKyAgICBnbFNoYWRlclNvdXJjZVR5cGUgc2hhZGVy
U291cmNlOworICAgIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZVR5cGUgc3RlbmNpbEZ1bmNTZXBhcmF0
ZTsKKyAgICBnbFN0ZW5jaWxNYXNrU2VwYXJhdGVUeXBlIHN0ZW5jaWxNYXNrU2VwYXJhdGU7Cisg
ICAgZ2xTdGVuY2lsT3BTZXBhcmF0ZVR5cGUgc3RlbmNpbE9wU2VwYXJhdGU7CisgICAgZ2xVbmlm
b3JtMWZUeXBlIHVuaWZvcm0xZjsKKyAgICBnbFVuaWZvcm0xZnZUeXBlIHVuaWZvcm0xZnY7Cisg
ICAgZ2xVbmlmb3JtMWlUeXBlIHVuaWZvcm0xaTsKKyAgICBnbFVuaWZvcm0xaXZUeXBlIHVuaWZv
cm0xaXY7CisgICAgZ2xVbmlmb3JtMmZUeXBlIHVuaWZvcm0yZjsKKyAgICBnbFVuaWZvcm0yZnZU
eXBlIHVuaWZvcm0yZnY7CisgICAgZ2xVbmlmb3JtMmlUeXBlIHVuaWZvcm0yaTsKKyAgICBnbFVu
aWZvcm0yaXZUeXBlIHVuaWZvcm0yaXY7CisgICAgZ2xVbmlmb3JtM2ZUeXBlIHVuaWZvcm0zZjsK
KyAgICBnbFVuaWZvcm0zZnZUeXBlIHVuaWZvcm0zZnY7CisgICAgZ2xVbmlmb3JtM2lUeXBlIHVu
aWZvcm0zaTsKKyAgICBnbFVuaWZvcm0zaXZUeXBlIHVuaWZvcm0zaXY7CisgICAgZ2xVbmlmb3Jt
NGZUeXBlIHVuaWZvcm00ZjsKKyAgICBnbFVuaWZvcm00ZnZUeXBlIHVuaWZvcm00ZnY7CisgICAg
Z2xVbmlmb3JtNGlUeXBlIHVuaWZvcm00aTsKKyAgICBnbFVuaWZvcm00aXZUeXBlIHVuaWZvcm00
aXY7CisgICAgZ2xVbmlmb3JtTWF0cml4MmZ2VHlwZSB1bmlmb3JtTWF0cml4MmZ2OworICAgIGds
VW5pZm9ybU1hdHJpeDNmdlR5cGUgdW5pZm9ybU1hdHJpeDNmdjsKKyAgICBnbFVuaWZvcm1NYXRy
aXg0ZnZUeXBlIHVuaWZvcm1NYXRyaXg0ZnY7CisgICAgZ2xVc2VQcm9ncmFtVHlwZSB1c2VQcm9n
cmFtOworICAgIGdsVmFsaWRhdGVQcm9ncmFtVHlwZSB2YWxpZGF0ZVByb2dyYW07CisgICAgZ2xW
ZXJ0ZXhBdHRyaWIxZlR5cGUgdmVydGV4QXR0cmliMWY7CisgICAgZ2xWZXJ0ZXhBdHRyaWIxZnZU
eXBlIHZlcnRleEF0dHJpYjFmdjsKKyAgICBnbFZlcnRleEF0dHJpYjJmVHlwZSB2ZXJ0ZXhBdHRy
aWIyZjsKKyAgICBnbFZlcnRleEF0dHJpYjJmdlR5cGUgdmVydGV4QXR0cmliMmZ2OworICAgIGds
VmVydGV4QXR0cmliM2ZUeXBlIHZlcnRleEF0dHJpYjNmOworICAgIGdsVmVydGV4QXR0cmliM2Z2
VHlwZSB2ZXJ0ZXhBdHRyaWIzZnY7CisgICAgZ2xWZXJ0ZXhBdHRyaWI0ZlR5cGUgdmVydGV4QXR0
cmliNGY7CisgICAgZ2xWZXJ0ZXhBdHRyaWI0ZnZUeXBlIHZlcnRleEF0dHJpYjRmdjsKKyAgICBn
bFZlcnRleEF0dHJpYlBvaW50ZXJUeXBlIHZlcnRleEF0dHJpYlBvaW50ZXI7CisKKyAgICBHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJzOworICAgIFFHTFdpZGdldCogbV9nbFdp
ZGdldDsKKyAgICBHTHVpbnQgbV90ZXh0dXJlOworICAgIEdMdWludCBtX21haW5GYm87CisgICAg
R0x1aW50IG1fY3VycmVudEZibzsKKyAgICBHTHVpbnQgbV9kZXB0aEJ1ZmZlcjsKKyAgICBRSW1h
Z2UgbV9waXhlbHM7CisgICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz4gbV9zeW50aGV0aWNF
cnJvcnM7CisKK3ByaXZhdGU6CisKKyAgICB2b2lkKiBnZXRQcm9jQWRkcmVzcyhjb25zdCBTdHJp
bmcmIHByb2MpOworICAgIGJvb2wgbV9jb250ZXh0VmFsaWQ7Cit9OworCisjaWYgZGVmaW5lZCAo
UVRfT1BFTkdMX0VTXzIpIAorI2RlZmluZSBHRVRfUFJPQ19BRERSRVNTKFByb2MpIFByb2MKKyNl
bHNlCisjZGVmaW5lIEdFVF9QUk9DX0FERFJFU1MoUHJvYykgcmVpbnRlcnByZXRfY2FzdDxQcm9j
IyNUeXBlPihnZXRQcm9jQWRkcmVzcygjUHJvYykpOworI2VuZGlmCisgCitHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzKQorICAgIDogbV9hdHRycyhhdHRycykKKyAgICAsIG1fZ2xXaWRn
ZXQoMCkKKyAgICAsIG1fdGV4dHVyZSgwKQorICAgICwgbV9tYWluRmJvKDApCisgICAgLCBtX2N1
cnJlbnRGYm8oMCkKKyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fY29udGV4dFZhbGlk
KHRydWUpCit7CisgICAgbV9hdHRycy5hbHBoYSA9IHRydWU7CisgICAgbV9hdHRycy5kZXB0aCA9
IHRydWU7CisgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgbV9hdHRycy5hbnRpYWxp
YXMgPSBmYWxzZTsKKyAgICBtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7CisKKyAg
ICBRR0xGb3JtYXQgZm9ybWF0OworCisgICAgZm9ybWF0LnNldERlcHRoKHRydWUpOworICAgIGZv
cm1hdC5zZXRTYW1wbGVCdWZmZXJzKHRydWUpOworICAgIGZvcm1hdC5zZXRTdGVuY2lsKGZhbHNl
KTsKKworICAgIG1fZ2xXaWRnZXQgPSBuZXcgUUdMV2lkZ2V0KGZvcm1hdCk7CisgICAgaWYgKCFt
X2dsV2lkZ2V0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJHcmFwaGljc0NvbnRl
eHQzRDogUUdMV2lkZ2V0IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBjb250ZXh0Iik7CisgICAgICAg
IG1fY29udGV4dFZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgYWN0aXZlVGV4dHVyZSA9IEdFVF9QUk9D
X0FERFJFU1MoZ2xBY3RpdmVUZXh0dXJlKTsKKyAgICBhdHRhY2hTaGFkZXIgPSBHRVRfUFJPQ19B
RERSRVNTKGdsQXR0YWNoU2hhZGVyKTsKKyAgICBiaW5kQXR0cmliTG9jYXRpb24gPSBHRVRfUFJP
Q19BRERSRVNTKGdsQmluZEF0dHJpYkxvY2F0aW9uKTsKKyAgICBiaW5kQnVmZmVyID0gR0VUX1BS
T0NfQUREUkVTUyhnbEJpbmRCdWZmZXIpOworICAgIGJpbmRGcmFtZWJ1ZmZlciA9IEdFVF9QUk9D
X0FERFJFU1MoZ2xCaW5kRnJhbWVidWZmZXIpOworICAgIGJpbmRSZW5kZXJidWZmZXIgPSBHRVRf
UFJPQ19BRERSRVNTKGdsQmluZFJlbmRlcmJ1ZmZlcik7CisgICAgYmxlbmRDb2xvciA9IEdFVF9Q
Uk9DX0FERFJFU1MoZ2xCbGVuZENvbG9yKTsKKyAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUgPSBH
RVRfUFJPQ19BRERSRVNTKGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKTsKKyAgICBibGVuZEZ1bmNT
ZXBhcmF0ZSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xCbGVuZEZ1bmNTZXBhcmF0ZSk7CisgICAgYnVm
ZmVyRGF0YSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xCdWZmZXJEYXRhKTsKKyAgICBidWZmZXJTdWJE
YXRhID0gR0VUX1BST0NfQUREUkVTUyhnbEJ1ZmZlclN1YkRhdGEpOworICAgIGNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMgPSBHRVRfUFJPQ19BRERSRVNTKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyk7
CisgICAgY29tcGlsZVNoYWRlciA9IEdFVF9QUk9DX0FERFJFU1MoZ2xDb21waWxlU2hhZGVyKTsK
KyAgICBjcmVhdGVQcm9ncmFtID0gR0VUX1BST0NfQUREUkVTUyhnbENyZWF0ZVByb2dyYW0pOwor
ICAgIGNyZWF0ZVNoYWRlciA9IEdFVF9QUk9DX0FERFJFU1MoZ2xDcmVhdGVTaGFkZXIpOworICAg
IGRlbGV0ZUJ1ZmZlcnMgPSBHRVRfUFJPQ19BRERSRVNTKGdsRGVsZXRlQnVmZmVycyk7CisgICAg
ZGVsZXRlRnJhbWVidWZmZXJzID0gR0VUX1BST0NfQUREUkVTUyhnbERlbGV0ZUZyYW1lYnVmZmVy
cyk7CisgICAgZGVsZXRlUHJvZ3JhbSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xEZWxldGVQcm9ncmFt
KTsKKyAgICBkZWxldGVSZW5kZXJidWZmZXJzID0gR0VUX1BST0NfQUREUkVTUyhnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMpOworICAgIGRlbGV0ZVNoYWRlciA9IEdFVF9QUk9DX0FERFJFU1MoZ2xEZWxl
dGVTaGFkZXIpOworICAgIGRldGFjaFNoYWRlciA9IEdFVF9QUk9DX0FERFJFU1MoZ2xEZXRhY2hT
aGFkZXIpOworICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSA9IEdFVF9QUk9DX0FERFJFU1Mo
Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOworICAgIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5
ID0gR0VUX1BST0NfQUREUkVTUyhnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KTsKKyAgICBmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlciA9IEdFVF9QUk9DX0FERFJFU1MoZ2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcik7CisgICAgZnJhbWVidWZmZXJUZXh0dXJlMkQgPSBHRVRfUFJPQ19BRERSRVNTKGds
RnJhbWVidWZmZXJUZXh0dXJlMkQpOworICAgIGdlbkJ1ZmZlcnMgPSBHRVRfUFJPQ19BRERSRVNT
KGdsR2VuQnVmZmVycyk7CisgICAgZ2VuZXJhdGVNaXBtYXAgPSBHRVRfUFJPQ19BRERSRVNTKGds
R2VuZXJhdGVNaXBtYXApOworICAgIGdlbkZyYW1lYnVmZmVycyA9IEdFVF9QUk9DX0FERFJFU1Mo
Z2xHZW5GcmFtZWJ1ZmZlcnMpOworICAgIGdlblJlbmRlcmJ1ZmZlcnMgPSBHRVRfUFJPQ19BRERS
RVNTKGdsR2VuUmVuZGVyYnVmZmVycyk7CisgICAgZ2V0QWN0aXZlQXR0cmliID0gR0VUX1BST0Nf
QUREUkVTUyhnbEdldEFjdGl2ZUF0dHJpYik7CisgICAgZ2V0QWN0aXZlVW5pZm9ybSA9IEdFVF9Q
Uk9DX0FERFJFU1MoZ2xHZXRBY3RpdmVVbmlmb3JtKTsKKyAgICBnZXRBdHRyaWJMb2NhdGlvbiA9
IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRBdHRyaWJMb2NhdGlvbik7CisgICAgZ2V0QnVmZmVyUGFy
YW1ldGVyaXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYpOworICAg
IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2ID0gR0VUX1BST0NfQUREUkVTUyhn
bEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KTsKKyAgICBnZXRQcm9ncmFtSW5m
b0xvZyA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRQcm9ncmFtSW5mb0xvZyk7CisgICAgZ2V0UHJv
Z3JhbWl2ID0gR0VUX1BST0NfQUREUkVTUyhnbEdldFByb2dyYW1pdik7CisgICAgZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXYpOworICAgIGdldFNoYWRlckluZm9Mb2cgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0
U2hhZGVySW5mb0xvZyk7CisgICAgZ2V0U2hhZGVyaXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0
U2hhZGVyaXYpOworICAgIGdldFNoYWRlclNvdXJjZSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRT
aGFkZXJTb3VyY2UpOworICAgIGdldFVuaWZvcm1mdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRV
bmlmb3JtZnYpOworICAgIGdldFVuaWZvcm1pdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRVbmlm
b3JtaXYpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xHZXRV
bmlmb3JtTG9jYXRpb24pOworICAgIGdldFZlcnRleEF0dHJpYmZ2ID0gR0VUX1BST0NfQUREUkVT
UyhnbEdldFZlcnRleEF0dHJpYmZ2KTsKKyAgICBnZXRWZXJ0ZXhBdHRyaWJpdiA9IEdFVF9QUk9D
X0FERFJFU1MoZ2xHZXRWZXJ0ZXhBdHRyaWJpdik7CisgICAgZ2V0VmVydGV4QXR0cmliUG9pbnRl
cnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYpOworICAgIGlz
QnVmZmVyID0gR0VUX1BST0NfQUREUkVTUyhnbElzQnVmZmVyKTsKKyAgICBpc0ZyYW1lYnVmZmVy
ID0gR0VUX1BST0NfQUREUkVTUyhnbElzRnJhbWVidWZmZXIpOworICAgIGlzUHJvZ3JhbSA9IEdF
VF9QUk9DX0FERFJFU1MoZ2xJc1Byb2dyYW0pOworICAgIGlzUmVuZGVyYnVmZmVyID0gR0VUX1BS
T0NfQUREUkVTUyhnbElzUmVuZGVyYnVmZmVyKTsKKyAgICBpc1NoYWRlciA9IEdFVF9QUk9DX0FE
RFJFU1MoZ2xJc1NoYWRlcik7CisgICAgbGlua1Byb2dyYW0gPSBHRVRfUFJPQ19BRERSRVNTKGds
TGlua1Byb2dyYW0pOworICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UgPSBHRVRfUFJPQ19BRERSRVNT
KGdsUmVuZGVyYnVmZmVyU3RvcmFnZSk7CisgICAgc2hhZGVyU291cmNlID0gR0VUX1BST0NfQURE
UkVTUyhnbFNoYWRlclNvdXJjZSk7CisgICAgc3RlbmNpbEZ1bmNTZXBhcmF0ZSA9IEdFVF9QUk9D
X0FERFJFU1MoZ2xTdGVuY2lsRnVuY1NlcGFyYXRlKTsKKyAgICBzdGVuY2lsTWFza1NlcGFyYXRl
ID0gR0VUX1BST0NfQUREUkVTUyhnbFN0ZW5jaWxNYXNrU2VwYXJhdGUpOworICAgIHN0ZW5jaWxP
cFNlcGFyYXRlID0gR0VUX1BST0NfQUREUkVTUyhnbFN0ZW5jaWxPcFNlcGFyYXRlKTsKKyAgICB1
bmlmb3JtMWYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTFmKTsKKyAgICB1bmlmb3JtMWZ2
ID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm0xZnYpOworICAgIHVuaWZvcm0xaSA9IEdFVF9Q
Uk9DX0FERFJFU1MoZ2xVbmlmb3JtMWkpOworICAgIHVuaWZvcm0xaXYgPSBHRVRfUFJPQ19BRERS
RVNTKGdsVW5pZm9ybTFpdik7CisgICAgdW5pZm9ybTJmID0gR0VUX1BST0NfQUREUkVTUyhnbFVu
aWZvcm0yZik7CisgICAgdW5pZm9ybTJmdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtMmZ2
KTsKKyAgICB1bmlmb3JtMmkgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTJpKTsKKyAgICB1
bmlmb3JtMml2ID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm0yaXYpOworICAgIHVuaWZvcm0z
ZiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtM2YpOworICAgIHVuaWZvcm0zZnYgPSBHRVRf
UFJPQ19BRERSRVNTKGdsVW5pZm9ybTNmdik7CisgICAgdW5pZm9ybTNpID0gR0VUX1BST0NfQURE
UkVTUyhnbFVuaWZvcm0zaSk7CisgICAgdW5pZm9ybTNpdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xV
bmlmb3JtM2l2KTsKKyAgICB1bmlmb3JtNGYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTRm
KTsKKyAgICB1bmlmb3JtNGZ2ID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm00ZnYpOworICAg
IHVuaWZvcm00aSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtNGkpOworICAgIHVuaWZvcm00
aXYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybTRpdik7CisgICAgdW5pZm9ybU1hdHJpeDJm
diA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVbmlmb3JtTWF0cml4MmZ2KTsKKyAgICB1bmlmb3JtTWF0
cml4M2Z2ID0gR0VUX1BST0NfQUREUkVTUyhnbFVuaWZvcm1NYXRyaXgzZnYpOworICAgIHVuaWZv
cm1NYXRyaXg0ZnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVW5pZm9ybU1hdHJpeDRmdik7CisgICAg
dXNlUHJvZ3JhbSA9IEdFVF9QUk9DX0FERFJFU1MoZ2xVc2VQcm9ncmFtKTsKKyAgICB2YWxpZGF0
ZVByb2dyYW0gPSBHRVRfUFJPQ19BRERSRVNTKGdsVmFsaWRhdGVQcm9ncmFtKTsKKyAgICB2ZXJ0
ZXhBdHRyaWIxZiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xWZXJ0ZXhBdHRyaWIxZik7CisgICAgdmVy
dGV4QXR0cmliMWZ2ID0gR0VUX1BST0NfQUREUkVTUyhnbFZlcnRleEF0dHJpYjFmdik7CisgICAg
dmVydGV4QXR0cmliMmYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVmVydGV4QXR0cmliMmYpOworICAg
IHZlcnRleEF0dHJpYjJmdiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xWZXJ0ZXhBdHRyaWIyZnYpOwor
ICAgIHZlcnRleEF0dHJpYjNmID0gR0VUX1BST0NfQUREUkVTUyhnbFZlcnRleEF0dHJpYjNmKTsK
KyAgICB2ZXJ0ZXhBdHRyaWIzZnYgPSBHRVRfUFJPQ19BRERSRVNTKGdsVmVydGV4QXR0cmliM2Z2
KTsKKyAgICB2ZXJ0ZXhBdHRyaWI0ZiA9IEdFVF9QUk9DX0FERFJFU1MoZ2xWZXJ0ZXhBdHRyaWI0
Zik7CisgICAgdmVydGV4QXR0cmliNGZ2ID0gR0VUX1BST0NfQUREUkVTUyhnbFZlcnRleEF0dHJp
YjRmdik7CisgICAgdmVydGV4QXR0cmliUG9pbnRlciA9IEdFVF9QUk9DX0FERFJFU1MoZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKTsKKworICAgIGlmICghbV9jb250ZXh0VmFsaWQpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJHcmFwaGljc0NvbnRleHQzRDogQWxsIG5lZWRlZCBPcGVuR0wgZXh0ZW5zaW9u
cyBhcmUgbm90IGF2YWlsYWJsZSIpOworICAgICAgICBtX2NvbnRleHRWYWxpZCA9IGZhbHNlOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJl
KTsKKyAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Rl
eHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBH
cmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwg
MSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwKTsKKworICAgIGdlbkZyYW1lYnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9tYWluRmJv
KTsKKyAgICBtX2N1cnJlbnRGYm8gPSBtX21haW5GYm87CisKKyAgICBiaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX21haW5GYm8pOworCisgICAgZ2VuUmVu
ZGVyYnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgYmluZFJlbmRl
cmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsK
KyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NP
TVBPTkVOVDE2LCAvKiB3aWR0aCAqLyAxLCAvKiBoZWlnaHQgKi8gMSk7CisjZWxzZQorICAgIHJl
bmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVCwgLyogd2lkdGggKi8gMSwgLyogaGVpZ2h0ICov
IDEpOworI2VuZGlmCisKKyAgICBiaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIDApOworIAorICAgIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQw
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKyAgICBnbENsZWFyQ29sb3IoLyogcmVkICovIDAsIC8q
IGdyZWVuICovIDAsIC8qIGJsdWUgKi8gMCwgLyogYWxwaGEgKi8gMCk7CisKKyAgICBpZiAoY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICBMT0dfRVJS
T1IoIkdyYXBoaWNzQ29udGV4dDNEOiBXYXNuJ3QgYWJsZSB0byBjcmVhdGUgdGhlIG1haW4gZnJh
bWVidWZmZXIiKTsKKyAgICAgICAgbV9jb250ZXh0VmFsaWQgPSBmYWxzZTsKKyAgICB9Cit9CisK
K0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkK
K3sKKyAgICBkZWxldGUgbV9nbFdpZGdldDsKKyAgICBtX2dsV2lkZ2V0ID0gMDsKK30KKwordm9p
ZCogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvY0FkZHJlc3MoY29uc3QgU3RyaW5n
JiBwcm9jKQoreworICAgIFN0cmluZyBleHRbM10gPSB7ICIiLCAiQVJCIiwgIkVYVCIgfTsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgIFN0cmluZyBuYW1lV2l0
aEV4dCA9IHByb2MgKyBleHRbaV07CisKKyAgICAgICAgdm9pZCogYWRkciA9IG1fZ2xXaWRnZXQt
PmNvbnRleHQoKS0+Z2V0UHJvY0FkZHJlc3MobmFtZVdpdGhFeHQudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgIGlmIChhZGRyKSAKKyAgICAgICAgICAgIHJldHVybiBhZGRyOworICAgIH0KKworICAg
IExPR19FUlJPUigiR3JhcGhpY3NDb250ZXh0M0Q6IERpZCBub3QgZmluZCBHTCBmdW5jdGlvbiAl
cyIsIHByb2MudXRmOCgpLmRhdGEoKSk7CisgICAgbV9jb250ZXh0VmFsaWQgPSBmYWxzZTsKKyAg
ICByZXR1cm4gMDsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3ND
b250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKK3sK
KyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQobmV3IEdyYXBoaWNzQ29udGV4
dDNEKGF0dHJzKSk7CisgICAgcmV0dXJuIGNvbnRleHQtPm1faW50ZXJuYWwgPyBjb250ZXh0LnJl
bGVhc2UoKSA6IDA7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKKyAgICA6IG1faW50ZXJuYWwobmV3
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoYXR0cnMpKQoreworICAgIGlmICghbV9pbnRlcm5h
bC0+aXNDb250ZXh0VmFsaWQoKSkgCisgICAgICAgIG1faW50ZXJuYWwgPSAwOworfQorCitHcmFw
aGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKK3sKK30KKworUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCgpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQ7Cit9CisKK1BsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPm1fdGV4dHVyZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9
IGNvbnRleHQtPmNhbnZhcygpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZh
cy0+YnVmZmVyKCk7CisKKyAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ludGVybmFsLT5tX21haW5GYm8pOworCisgICAgZ2xS
ZWFkUGl4ZWxzKC8qIHggKi8gMCwgLyogeSAqLyAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIG1faW50ZXJuYWwtPm1fcGl4ZWxzLmJpdHMoKSk7CisKKyAgICBRUGFpbnRlciog
cCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgIHAtPmRy
YXdJbWFnZSgvKiB4ICovIDAsIC8qIHkgKi8gMCwgbV9pbnRlcm5hbC0+bV9waXhlbHMudHJhbnNm
b3JtZWQoUU1hdHJpeCgpLnJvdGF0ZSgxODApKSk7CisKKyAgICBtX2ludGVybmFsLT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ludGVybmFsLT5tX2N1
cnJlbnRGYm8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCit7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQoreworICAgIGlmICgoKHdpZHRoID09IG1fY3VycmVudFdpZHRoKSAmJiAoaGVpZ2h0ID09IG1f
Y3VycmVudEhlaWdodCkpIHx8ICghbV9pbnRlcm5hbCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdo
dDsKKworICAgIG1faW50ZXJuYWwtPm1fcGl4ZWxzID0gUUltYWdlKG1fY3VycmVudFdpZHRoLCBt
X2N1cnJlbnRIZWlnaHQsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgZ2xCaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9pbnRlcm5hbC0+bV90ZXh0dXJlKTsKKyAgICBnbFRl
eEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIC8qIGxldmVsICovIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCB3aWR0aCwgaGVpZ2h0LCAvKiBib3JkZXIgKi8gMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAv
KiBkYXRhICovIDApOworICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDApOworICAgCisgICAgbV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9pbnRlcm5hbC0+bV9tYWluRmJvKTsKKyAgICBtX2lu
dGVybmFsLT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IG1faW50ZXJuYWwtPm1fZGVwdGhCdWZmZXIpOworI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIp
CisgICAgcmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOwor
I2Vsc2UKKyAgICByZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQsIHdpZHRoLCBoZWlnaHQp
OworI2VuZGlmCisgICAgbV9pbnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZl
clRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1f
aW50ZXJuYWwtPm1fdGV4dHVyZSwgMCk7CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9p
bnRlcm5hbC0+bV9kZXB0aEJ1ZmZlcik7CisKKyAgICBHTGVudW0gc3RhdHVzID0gbV9pbnRlcm5h
bC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIp
OworICAgIGlmIChzdGF0dXMgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBM
RVRFKSB7CisgICAgICAgIExPR19FUlJPUigiR3JhcGhpY3NDb250ZXh0M0Q6IFdhc24ndCBhYmxl
IHRvIHJlc2hhcGUgdGhlIG1haW4gZnJhbWVidWZmZXIiKTsKKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICB9CisKKyAgICBnbENsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZG
RVJfQklUKTsKKyAgICBnbEZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFj
dGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAg
ICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPmF0dGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmpl
Y3QoKSwgKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVk
IGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVy
bmFsLT5iaW5kQXR0cmliTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIGluZGV4
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
QnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
YmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiAw
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBidWZmZXIpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5tX2N1cnJlbnRG
Ym8gPSAoYnVmZmVyICYmIGJ1ZmZlci0+b2JqZWN0KCkpID8gKEdMdWludCkgYnVmZmVyLT5vYmpl
Y3QoKSA6IG1faW50ZXJuYWwtPm1fbWFpbkZibzsKKyAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVi
dWZmZXIodGFyZ2V0LCBtX2ludGVybmFsLT5tX2N1cnJlbnRGYm8pOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJH
TFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJn
ZXQsIHJlbmRlcmJ1ZmZlciA/IChHTHVpbnQpIHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0
YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlID8g
KEdMdWludCkgdGV4dHVyZS0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBk
b3VibGUgYWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBnbEJsZW5kQ29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlZCksIHN0YXRpY19jYXN0
PGZsb2F0PihncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0PihibHVlKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGFscGhhKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24o
dW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgZ2xCbGVuZEVxdWF0aW9uKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1
bnNpZ25lZCBsb25nIG1vZGVBbHBoYSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2Rl
UkdCLCBtb2RlQWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMo
dW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbEJsZW5kRnVuYyhzZmFj
dG9yLCBkZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5k
RnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwg
dW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSkKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJs
ZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGEodGFyZ2V0
LCBzaXplLCAvKiBkYXRhICovIDAsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xBcnJheSogYXJyYXksIHVu
c2lnbmVkIGxvbmcgdXNhZ2UpCit7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmxlbmd0aCgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5idWZmZXJEYXRhKHRhcmdldCwgYXJyYXktPmJ5
dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBv
ZmZzZXQsIFdlYkdMQXJyYXkqIGFycmF5KQoreworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5s
ZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQs
IG9mZnNldCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOworfQor
Cit1bnNpZ25lZCBsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNoZWNrRnJhbWVidWZmZXJTdGF0
dXModGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihkb3Vi
bGUgciwgZG91YmxlIGcsIGRvdWJsZSBiLCBkb3VibGUgYSkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQ2xlYXJDb2xvcihzdGF0aWNfY2FzdDxm
bG9hdD4ociksIHN0YXRpY19jYXN0PGZsb2F0PihnKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGIpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oYSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVh
cih1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBnbENsZWFyKG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgZ2xD
bGVhckRlcHRoZihkZXB0aCk7CisjZWxzZQorICAgIGdsQ2xlYXJEZXB0aChkZXB0aCk7CisjZW5k
aWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKGxvbmcgcykKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQ2xlYXJT
dGVuY2lsKHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2soYm9vbCBy
ZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRl
cihXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Y29tcGls
ZVNoYWRlcigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWws
IHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbENvcHlUZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCh1bnNp
Z25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQs
IGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGds
Q29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwg
d2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKHVu
c2lnbmVkIGxvbmcgbW9kZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIGdsQ3VsbEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlcHRoRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERlcHRoRnVuYyhmdW5jKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKGJvb2wgZmxhZykKK3sKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRGVwdGhNYXNrKGZsYWcpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91
YmxlIHpGYXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIGdsRGVwdGhSYW5nZWYoek5lYXIsIHpG
YXIpOworI2Vsc2UKKyAgICBnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOworI2VuZGlmCit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dy
YW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFT
U0VSVChzaGFkZXIpOworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CisgICAgbV9pbnRlcm5hbC0+ZGV0YWNoU2hhZGVyKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgp
LCAoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRGlzYWJsZShjYXApOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRl
eCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0
LCBsb25nIGNvdW50KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgZ2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVk
IGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbERyYXdFbGVtZW50cyht
b2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50
cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlKHVu
c2lnbmVkIGxvbmcgY2FwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7CisgICAgZ2xFbmFibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZmluaXNoKCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIGdsRmluaXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRmx1c2go
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQg
bG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiBidWZmZXIpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgYnVmZmVyID8gKEdMdWludCkgYnVmZmVyLT5vYmplY3QoKSA6IDApOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdl
dCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBsb25nIGxldmVsKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUgPyAoR0x1aW50
KSB0ZXh0dXJlLT5vYmplY3QoKSA6IDAsIGxldmVsKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsRnJvbnRGYWNlKG1vZGUpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdl
dCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1f
aW50ZXJuYWwtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtLT5vYmplY3Qo
KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisKKyAgICBHTGludCBtYXhMZW5ndGg7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJv
Z3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0KCkpLCBHcmFwaGljc0Nv
bnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4TGVuZ3RoKTsKKworICAg
IEdMY2hhciBuYW1lW21heExlbmd0aF07IAorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aDsKKyAgICBH
TGludCBzaXplOworICAgIEdMZW51bSB0eXBlOworCisgICAgbV9pbnRlcm5hbC0+Z2V0QWN0aXZl
QXR0cmliKHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0KCkpLCBpbmRleCwgbWF4
TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKworICAgIGlmICghbmFt
ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5mby5uYW1lID0gU3RyaW5n
KG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXpl
ID0gc2l6ZTsKKworICAgIHJldHVybiB0cnVlOworfQorICAgIAorYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtLT5vYmplY3Qo
KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisKKyAgICBHTGludCBtYXhMZW5ndGg7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJv
Z3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbS0+b2JqZWN0KCkpLCBHcmFwaGljc0Nv
bnRleHQzRDo6QUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heExlbmd0aCk7CisKKyAgICBH
TGNoYXIgbmFtZVttYXhMZW5ndGhdOworICAgIEdMc2l6ZWkgbmFtZUxlbmd0aDsKKyAgICBHTGlu
dCBzaXplOworICAgIEdMZW51bSB0eXBlOworCisgICAgbV9pbnRlcm5hbC0+Z2V0QWN0aXZlVW5p
Zm9ybShzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgaW5kZXgsIG1heExl
bmd0aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisKKyAgICBpZiAoIW5hbWVM
ZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluZm8ubmFtZSA9IFN0cmluZyhu
YW1lLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9
IHNpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAtMTsKKyAgICAKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVy
bmFsLT5nZXRBdHRyaWJMb2NhdGlvbigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbmFtZS51
dGY4KCkuZGF0YSgpKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sKKyAgICByZXR1cm4gbV9pbnRl
cm5hbC0+bV9hdHRyczsKK30KKwordW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
RXJyb3IoKQoreworICAgIGlmIChtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkg
PiAwKSB7CisgICAgICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBpdGVy
ID0gbV9pbnRlcm5hbC0+bV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKKyAgICAgICAgdW5zaWdu
ZWQgbG9uZyBlcnIgPSAqaXRlcjsKKyAgICAgICAgbV9pbnRlcm5hbC0+bV9zeW50aGV0aWNFcnJv
cnMucmVtb3ZlKGl0ZXIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsR2V0RXJyb3Io
KTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcodW5zaWduZWQgbG9u
ZyBuYW1lKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgcmV0dXJuIFN0cmluZygoY29uc3QgY2hhciopIGdsR2V0U3RyaW5nKG5hbWUpKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBtb2RlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgZ2xIaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5pc0J1ZmZlcigoR0x1aW50KSBi
dWZmZXItPm9iamVjdCgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVk
KHVuc2lnbmVkIGxvbmcgY2FwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgcmV0dXJuIGdsSXNFbmFibGVkKGNhcCk7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIp
Cit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgcmV0dXJuIG1f
aW50ZXJuYWwtPmlzRnJhbWVidWZmZXIoKEdMdWludCkgZnJhbWVidWZmZXItPm9iamVjdCgpKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBt
X2ludGVybmFsLT5pc1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCiti
b29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciog
cmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNSZW5kZXJidWZmZXIoKEdMdWludCkgcmVuZGVyYnVm
ZmVyLT5vYmplY3QoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFdl
YkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwor
ICAgIHJldHVybiBtX2ludGVybmFsLT5pc1NoYWRlcigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgp
KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSog
dGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVy
biBnbElzVGV4dHVyZSgoR0x1aW50KSB0ZXh0dXJlLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChkb3VibGUgd2lkdGgpCit7CisgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbExpbmVXaWR0aChzdGF0aWNfY2Fz
dDxmbG9hdD4od2lkdGgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmxp
bmtQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwYXJhbU5hbWUsIGxvbmcgcGFy
YW0pCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBn
bFBpeGVsU3RvcmVpKHBhcmFtTmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cykKK3sKKyAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsUG9seWdvbk9mZnNl
dChzdGF0aWNfY2FzdDxmbG9hdD4oZmFjdG9yKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHVuaXRzKSk7
Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhl
bHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKQoreworICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgCisgICAgaWYgKHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgfHwgZm9ybWF0ICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgUmVmUHRy
PFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6
Y3JlYXRlKHdpZHRoICogaGVpZ2h0ICogNCk7CisgICAgZ2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgKEdMdm9pZCopIGFycmF5LT5kYXRhKCkpOworICAgIHJl
dHVybiBhcnJheTsgICAgCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFk
ZXJDb21waWxlcigpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpy
ZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGlu
dGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkK
K3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50
ZXJuYWwtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKGRv
dWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbFNhbXBsZUNvdmVyYWdlKHN0YXRpY19jYXN0PGZsb2F0Pih2
YWx1ZSksIGludmVydCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IobG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xTY2lz
c29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
aGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7
CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgCisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKworICAgIC8vIEZvcmNlIHRoZSB1c2Ugb2YgR0xTTCAxLjA6CisgICAg
Ly8gaHR0cHM6Ly9jdnMua2hyb25vcy5vcmcvc3ZuL3JlcG9zL3JlZ2lzdHJ5L3RydW5rL3B1Ymxp
Yy93ZWJnbC9kb2Mvc3BlYy9XZWJHTC1zcGVjLmh0bWwjNC40CisgICAgLy8gRklYTUU6IExpbmVz
IGJlZ2lubmluZyB3aXRoICIjdmVyc2lvbiIgc2hvdWxkIGJlIHN0cmlwcGVkIG91dC4KKworICAg
IFN0cmluZyBwcmVwYXJlZDsKKyAgIAorICAgIHByZXBhcmVkLmFwcGVuZCgiI3ZlcnNpb24gMTAw
XG4iKTsKKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIHByZXBhcmVkLmFwcGVuZCgi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iKTsKKyNlbmRpZgorICAgIHByZXBhcmVkLmFwcGVu
ZChzdHJpbmcpOworCisgICAgQ1N0cmluZyBwcmVwYXJlZENTID0gcHJlcGFyZWQudXRmOCgpOwor
ICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBwcmVwYXJlZENTLmRhdGEoKTsKKyAgICBpbnQgbGVuZ3Ro
ID0gcHJlcGFyZWQubGVuZ3RoKCk7CisgICAgbV9pbnRlcm5hbC0+c2hhZGVyU291cmNlKChHTHVp
bnQpIHNoYWRlci0+b2JqZWN0KCksIC8qIGNvdW50ICovIDEsICZkYXRhLCAmbGVuZ3RoKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5j
LCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2sp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKHVuc2ln
bmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9u
ZyBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Cisg
ICAgbV9pbnRlcm5hbC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2sp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25n
IG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVu
Y2lsTWFza1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNrKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRl
cm5hbC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6c3RlbmNpbE9wKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6
ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIGdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKHVuc2lnbmVkIGxv
bmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25l
ZCBsb25nIHpwYXNzKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWws
IHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZih1bnNp
Z25lZCB0YXJnZXQsIHVuc2lnbmVkIHBhcmFtTmFtZSwgZmxvYXQgdmFsdWUpCit7CisgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBnbFRleFBhcmFtZXRlcmYo
dGFyZ2V0LCBwYXJhbU5hbWUsIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgcGFyYW1OYW1lLCBpbnQgdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwYXJhbU5hbWUsIHN0
YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMWYobG9uZyBsb2NhdGlvbiwgZmxvYXQgdjApCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMWYobG9jYXRp
b24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdihsb25nIGxv
Y2F0aW9uLCBmbG9hdCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFmdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYo
bG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJmKGxvY2F0
aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KGxv
bmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMmZ2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+
dW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogYXJyYXksIGludCBzaXplKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRl
cm5hbC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtNGYobG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYx
LCBmbG9hdCB2MiwgZmxvYXQgdjMpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwg
djIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdihsb25nIGxv
Y2F0aW9uLCBmbG9hdCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xX
aWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTRmdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWko
bG9uZyBsb2NhdGlvbiwgaW50IHYwKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYobG9uZyBsb2NhdGlvbiwgaW50
KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJh
eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaShsb25nIGxvY2F0aW9u
LCBpbnQgdjAsIGludCB2MSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdihsb25nIGxvY2F0aW9uLCBpbnQq
IGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKGxvbmcgbG9jYXRpb24s
IGludCB2MCwgaW50IHYxLCBpbnQgdjIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtM2kobG9jYXRpb24sIHYwLCB2
MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KGxvbmcgbG9j
YXRpb24sIGludCogYXJyYXksIGludCBzaXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRn
ZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTNpdihsb2NhdGlvbiwg
c2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGkobG9u
ZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGludCB2MiwgaW50IHYzKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9y
bTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgaW50KiBhcnJheSwgaW50IHNpemUpCit7Cisg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFs
LT51bmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2Us
IGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9u
LCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIGFy
cmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRy
YW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0
cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogYXJyYXksIGludCBz
aXplKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBh
cnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0oV2ViR0xQcm9n
cmFtKiBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICAKKyAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnVzZVByb2dy
YW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIEFTU0VS
VChwcm9ncmFtKTsKKyAgICAKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVu
dCgpOworICAgIG1faW50ZXJuYWwtPnZhbGlkYXRlUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5v
YmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKHVu
c2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjApCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdl
dC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIxZihpbmR4LCB2
MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25l
ZCBsb25nIGluZHgsIGZsb2F0KiBhcnJheSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjFmdihpbmR4LCBh
cnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKHVuc2ln
bmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMmYo
aW5keCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
MmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFycmF5KQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmli
MmZ2KGluZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKQor
eworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRl
cm5hbC0+dmVydGV4QXR0cmliM2YoaW5keCwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiBh
cnJheSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAg
IG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjNmdihpbmR4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQg
djAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpCit7CisgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWI0Zihp
bmR4LCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiBhcnJheSkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPnZlcnRl
eEF0dHJpYjRmdihpbmR4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQgc2l6ZSwgaW50IHR5cGUs
IGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zm
c2V0KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAg
bV9pbnRlcm5hbC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxp
emVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90
PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KGxvbmcg
eCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGdsVmlld3Bv
cnQoc3RhdGljX2Nhc3Q8R0xpbnQ+KHgpLCBzdGF0aWNfY2FzdDxHTGludD4oeSksIHN0YXRpY19j
YXN0PEdMc2l6ZWk+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8R0xzaXplaT4oaGVpZ2h0KSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcGFyYW1O
YW1lLCB1bnNpZ25lZCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIGdsR2V0Qm9vbGVhbnYocGFyYW1OYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBhcmFtTmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwt
PmdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBhcmFtTmFtZSwg
ZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50
KCk7CisgICAgZ2xHZXRGbG9hdHYocGFyYW1OYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcGFy
YW1OYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwYXJhbU5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwYXJhbU5hbWUsIGlu
dCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsK
KyAgICBnbEdldEludGVnZXJ2KHBhcmFtTmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBs
b25nIHBhcmFtTmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFByb2dyYW1pdigoR0x1aW50KSBw
cm9ncmFtLT5vYmplY3QoKSwgcGFyYW1OYW1lLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBHTGludCBs
ZW5ndGg7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KChHTHVpbnQpIHByb2dyYW0tPm9i
amVjdCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKwor
ICAgIEdMc2l6ZWkgc2l6ZTsKKworICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFs
bG9jKGxlbmd0aCk7CisgICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBt
X2ludGVybmFsLT5nZXRQcm9ncmFtSW5mb0xvZygoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwg
bGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisKKyAgICBTdHJpbmcgcmVzdWx0KGluZm8pOworICAgIGZh
c3RGcmVlKGluZm8pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgcGFyYW1OYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoV2ViR0xTaGFkZXIqIHNoYWRlciwgdW5zaWduZWQg
bG9uZyBwYXJhbU5hbWUsIGludCogdmFsdWUpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5n
ZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBwYXJhbU5hbWUsIHZhbHVlKTsK
K30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hh
ZGVyKiBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKworICAgIEdMaW50IGxlbmd0aDsKKyAgICBtX2ludGVybmFsLT5nZXRTaGFkZXJpdigoR0x1
aW50KSBzaGFkZXItPm9iamVjdCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RI
LCAmbGVuZ3RoKTsKKworICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xj
aGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOworICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJu
ICIiOworCisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVySW5mb0xvZygoR0x1aW50KSBzaGFkZXIt
Pm9iamVjdCgpLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKKworICAgIFN0cmluZyByZXN1bHQoaW5m
byk7CisgICAgZmFzdEZyZWUoaW5mbyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJp
bmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVy
KQoreworICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBH
TGludCBsZW5ndGg7CisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVyaXYoKEdMdWludCkgc2hhZGVy
LT5vYmplY3QoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9TT1VSQ0VfTEVOR1RILCAmbGVu
Z3RoKTsKKworICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikg
ZmFzdE1hbGxvYyhsZW5ndGgpOworICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJuICIiOwor
CisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0
KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOworCisgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKKyAg
ICBmYXN0RnJlZShpbmZvKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHBhcmFtTmFtZSwgZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQs
IHBhcmFtTmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQ
YXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwYXJhbU5hbWUs
IGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKKyAgICBnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1mdigo
R0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9u
ZyBsb2NhdGlvbiwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1pdigoR0x1aW50KSBwcm9n
cmFtLT5vYmplY3QoKSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKworbG9uZyBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICAKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRV
bmlmb3JtTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIG5hbWUudXRmOCgpLmRh
dGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KHVu
c2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcGFyYW1OYW1lLCBmbG9hdCogdmFsdWUp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2lu
dGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcg
aW5kZXgsIHVuc2lnbmVkIGxvbmcgcGFyYW1OYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0VmVy
dGV4QXR0cmliaXYoaW5kZXgsIHBhcmFtTmFtZSwgdmFsdWUpOworfQorCitsb25nIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5z
aWduZWQgbG9uZyBwYXJhbU5hbWUpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKKyAgICAKKyAgICB2b2lkKiBwb2ludGVyOworICAgIG1faW50ZXJuYWwtPmdl
dFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwYXJhbU5hbWUsICZwb2ludGVyKTsKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxsb25nPihwb2ludGVyKTsKK30KKworaW50IEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVu
c2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1
bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4
ZWxzKQoreworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgcmV0dXJu
IDA7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIGxldmVsLCBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSkKK3sKKyAgICBBU1NFUlQoaW1hZ2UpOworICAgIAorICAgIG1faW50ZXJuYWwt
Pm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VE
YXRhOworICAgIEdMdWludCBmb3JtYXQ7CisgICAgR0x1aW50IGludGVybmFsRm9ybWF0OworCisg
ICAgaWYgKCFleHRyYWN0SW1hZ2VEYXRhKGltYWdlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwg
aW1hZ2VEYXRhLCAmZm9ybWF0LCAmaW50ZXJuYWxGb3JtYXQpKSB7CisgICAgICAgIExPR19FUlJP
UigiR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQ6IGNvdWxkIG5vdCBleHRyYWN0IEltYWdl
IGRhdGEiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGdsVGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWln
aHQoKSwgCisgICAgICAgICAgICAgICAgIC8qIGJvcmRlciAqLyAwLCBmb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKKworICAgIHJldHVy
biAwOworfQorICAgIAoraW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYs
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWdu
ZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQoreworICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1
bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2ZmLCB1bnNpZ25lZCB5
b2ZmLCBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK3sK
KyAgICBBU1NFUlQoaW1hZ2UpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAg
ICBHTHVpbnQgZm9ybWF0OworICAgIEdMdWludCBpbnRlcm5hbEZvcm1hdDsKKworICAgIGlmICgh
ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0
YSwgJmZvcm1hdCwgJmludGVybmFsRm9ybWF0KSkgeworICAgICAgICBMT0dfRVJST1IoIkdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEOiBjb3VsZCBub3QgZXh0cmFjdCBJbWFnZSBkYXRh
Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBnbFRleFN1YkltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwg
CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVk
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgR0x1aW50IGhhbmRsZTsKKyAgICBtX2ludGVy
bmFsLT5nZW5CdWZmZXJzKC8qIGNvdW50ICovIDEsICZoYW5kbGUpOworICAgIHJldHVybiBoYW5k
bGU7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigp
Cit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBHTHVp
bnQgaGFuZGxlOworICAgIG1faW50ZXJuYWwtPmdlbkZyYW1lYnVmZmVycygvKiBjb3VudCAqLyAx
LCAmaGFuZGxlKTsKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit1bnNpZ25lZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+
bWFrZUN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlUHJvZ3JhbSgpOwor
fQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sK
KyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIEdMdWludCBo
YW5kbGU7CisgICAgbV9pbnRlcm5hbC0+Z2VuUmVuZGVyYnVmZmVycygvKiBjb3VudCAqLyAxLCAm
aGFuZGxlKTsKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAgICBtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIHJldHVybiBtX2ludGVybmFsLT5jcmVh
dGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFHTUVOVF9TSEFERVIgOiBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7Cit9CisK
K3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIEdMdWludCBoYW5kbGU7Cisg
ICAgZ2xHZW5UZXh0dXJlcygxLCAmaGFuZGxlKTsKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIodW5zaWduZWQgYnVmZmVyKQorewor
ICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5h
bC0+ZGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlRnJhbWVidWZmZXIodW5zaWduZWQgZnJhbWVidWZmZXIpCit7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVG
cmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCBwcm9ncmFtKQoreworICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlUHJvZ3JhbShw
cm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVy
KHVuc2lnbmVkIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5t
YWtlQ3VycmVudCgpOworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJnJl
bmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcih1
bnNpZ25lZCBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKKyAgICBtX2ludGVybmFsLT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQoreworICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CisgICAgZ2xEZWxldGVUZXh0
dXJlcygxLCAmdGV4dHVyZSk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6c2l6ZUluQnl0
ZXMoaW50IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGJ5dGUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIHJldHVybiBzaXplb2Yo
R0x1Ynl0ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgICAgIHJl
dHVybiBzaXplb2YoR0xzaG9ydCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKEdMdWludCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAg
IHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcih1
bnNpZ25lZCBsb25nIGVycm9yKQoreworICAgIG1faW50ZXJuYWwtPm1fc3ludGhldGljRXJyb3Jz
LmFkZChlcnJvcik7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJ
bWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wqIGhhc0FscGhhQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBbHBoYU9wKiBuZWVkZWRBbHBoYU9wLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0KQoreworICAgIFFJbWFnZTo6
Rm9ybWF0IGltYWdlRm9ybWF0ID0gKCFwcmVtdWx0aXBseUFscGhhKSA/IAorICAgICAgICBRSW1h
Z2U6OkZvcm1hdF9BUkdCMzIgOgorICAgICAgICBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVs
dGlwbGllZDsKKyAKKyAgICBRUGl4bWFwKiBuYXRpdmVQaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsgCisKKyAgICAqaGFzQWxwaGFDaGFubmVsID0gdHJ1ZTsKKyAg
ICAqbmVlZGVkQWxwaGFPcCA9IGtBbHBoYURvTm90aGluZzsKKyAgICAqZm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE7CisKKyAgICBRSW1hZ2UgbmF0aXZlSW1hZ2UgPSBuYXRpdmVQaXht
YXAtPnRvSW1hZ2UoKS5jb252ZXJ0VG9Gb3JtYXQoaW1hZ2VGb3JtYXQpOworICAgIG91dHB1dFZl
Y3Rvci5hcHBlbmQobmF0aXZlSW1hZ2UuYml0cygpLCBuYXRpdmVJbWFnZS5ieXRlQ291bnQoKSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZB
UykKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBiL1dlYktpdC9x
dC9BcGkvcXdlYnNldHRpbmdzLmNwcAppbmRleCBkNjBmMDljLi5lNmZkZjYxIDEwMDY0NAotLS0g
YS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
c2V0dGluZ3MuY3BwCkBAIC0xNTgsNiArMTU4LDEzIEBAIHZvaWQgUVdlYlNldHRpbmdzUHJpdmF0
ZTo6YXBwbHkoKQogCiAgICAgICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZCh2YWx1ZSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgICAgICB2
YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwtPmF0dHJpYnV0ZXMudmFsdWUoUVdl
YlNldHRpbmdzOjpXZWJHTEVuYWJsZWQpKTsKKworICAgICAgICBzZXR0aW5ncy0+c2V0V2ViR0xF
bmFibGVkKHZhbHVlKTsKKyNlbmRpZgorIAogICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFs
dWUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0
dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cykpOwogICAgICAgICBzZXR0aW5ncy0+c2V0
SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSh2YWx1ZSk7CkBAIC00MDEsNiAr
NDA4LDcgQEAgUVdlYlNldHRpbmdzOjpRV2ViU2V0dGluZ3MoKQogICAgIGQtPmF0dHJpYnV0ZXMu
aW5zZXJ0KFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscywgZmFs
c2UpOwogICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50
Q2FuQWNjZXNzRmlsZVVybHMsIHRydWUpOwogICAgIGQtPmF0dHJpYnV0ZXMuaW5zZXJ0KFFXZWJT
ZXR0aW5nczo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIGZhbHNlKTsKKyAgICBkLT5h
dHRyaWJ1dGVzLmluc2VydChRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgZmFsc2UpOwogICAg
IGQtPm9mZmxpbmVTdG9yYWdlRGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAgIGQt
PmRlZmF1bHRUZXh0RW5jb2RpbmcgPSBRTGF0aW4xU3RyaW5nKCJpc28tODg1OS0xIik7CiB9CmRp
ZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5oIGIvV2ViS2l0L3F0L0FwaS9x
d2Vic2V0dGluZ3MuaAppbmRleCBiMWY1Y2YyLi4yOWMwMWI2IDEwMDY0NAotLS0gYS9XZWJLaXQv
cXQvQXBpL3F3ZWJzZXR0aW5ncy5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgK
QEAgLTcwLDcgKzcwLDggQEAgcHVibGljOgogICAgICAgICBMb2NhbENvbnRlbnRDYW5BY2Nlc3NG
aWxlVXJscywKICAgICAgICAgRG5zUHJlZmV0Y2hFbmFibGVkLAogICAgICAgICBYU1NBdWRpdG9y
RW5hYmxlZCwKLSAgICAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQKKyAgICAgICAg
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsCisgICAgICAgIFdlYkdMRW5hYmxlZAogICAg
IH07CiAgICAgZW51bSBXZWJHcmFwaGljIHsKICAgICAgICAgTWlzc2luZ0ltYWdlR3JhcGhpYywK
ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmlu
ZGV4IGMwOWM4NzkuLmU5MTI3MzUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEwLTAyLTIzICBKYXJr
a28gU2Fra2luZW4gIDxqYXJra28uc2Fra2luZW5AdGlldG8uY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFF0IFdlYkdMIHN1cHBvcnQKKworICAg
ICAgICBBZGRzIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgb2YgV2ViR0wgc3VwcG9ydCB0byBRV2Vi
U2V0dGluZ3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTE1MworCisgICAgICAgICogQXBpL3F3ZWJzZXR0aW5ncy5jcHA6CisgICAgICAgIChRV2Vi
U2V0dGluZ3NQcml2YXRlOjphcHBseSk6CisgICAgICAgIChRV2ViU2V0dGluZ3M6OlFXZWJTZXR0
aW5ncyk6CisgICAgICAgICogQXBpL3F3ZWJzZXR0aW5ncy5oOgorCiAyMDEwLTAyLTE5ICBKZXN1
cyBTYW5jaGV6LVBhbGVuY2lhICA8amVzdXMucGFsZW5jaWFAb3BlbmJvc3NhLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCA5YTQ0
MzVjLi4zZDAyNzBmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDItMjMgIEphcmtrbyBT
YWtraW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXQgV2ViR0wgc3VwcG9ydAorCisgICAgICAg
IEFkZHMgdG9nZ2xpbmcgb2YgV2ViR0wgc3VwcG9ydCB0byBRdExhdW5jaGVyLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUxNTMKKworICAgICAgICAq
IFF0TGF1bmNoZXIvbWFpbi5jcHA6CisgICAgICAgIChMYXVuY2hlcldpbmRvdzo6dG9nZ2xlV2Vi
R0wpOgorICAgICAgICAoTGF1bmNoZXJXaW5kb3c6OnNldHVwVUkpOgorCiAyMDEwLTAyLTI0ICBK
ZXN1cyBTYW5jaGV6LVBhbGVuY2lhICA8amVzdXMucGFsZW5jaWFAb3BlbmJvc3NhLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAgYi9XZWJLaXRUb29scy9RdExhdW5j
aGVyL21haW4uY3BwCmluZGV4IGIyOTcxMGQuLjJkNTgyOTcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAKKysrIGIvV2ViS2l0VG9vbHMvUXRMYXVuY2hlci9tYWlu
LmNwcApAQCAtMTE3LDYgKzExNyw3IEBAIHByb3RlY3RlZCBzbG90czoKIAogICAgIHZvaWQgc2V0
VG91Y2hNb2NraW5nKGJvb2wgb24pOwogICAgIHZvaWQgdG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZyhib29sIHRvZ2dsZSk7CisgICAgdm9pZCB0b2dnbGVXZWJHTChib29sIHRvZ2dsZSk7CiAg
ICAgdm9pZCBpbml0aWFsaXplVmlldyhib29sIHVzZUdyYXBoaWNzVmlldyA9IGZhbHNlKTsKIAog
cHVibGljIHNsb3RzOgpAQCAtNDYzLDYgKzQ2NCwxMSBAQCB2b2lkIExhdW5jaGVyV2luZG93Ojp0
b2dnbGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGJvb2wgdG9nZ2xlKQogICAgIHBhZ2UoKS0+c2V0
dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0VuYWJsZWQsIHRvZ2dsZSk7CiB9CiAKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZVdlYkdM
KGJvb2wgdG9nZ2xlKQoreworICAgIHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkLCB0b2dnbGUpOworfQorCiB2b2lkIExhdW5jaGVyV2lu
ZG93Ojppbml0aWFsaXplVmlldyhib29sIHVzZUdyYXBoaWNzVmlldykKIHsKICAgICBkZWxldGUg
bV92aWV3OwpAQCAtNTgwLDYgKzU4NiwxMCBAQCB2b2lkIExhdW5jaGVyV2luZG93OjpzZXR1cFVJ
KCkKICAgICB0b2dnbGVHcmFwaGljc1ZpZXctPnNldENoZWNrYWJsZSh0cnVlKTsKICAgICB0b2dn
bGVHcmFwaGljc1ZpZXctPnNldENoZWNrZWQoZmFsc2UpOwogCisgICAgUUFjdGlvbiogdG9nZ2xl
V2ViR0wgPSB0b29sc01lbnUtPmFkZEFjdGlvbigiVG9nZ2xlIFdlYkdMIiwgdGhpcywgU0xPVCh0
b2dnbGVXZWJHTChib29sKSkpOworICAgIHRvZ2dsZVdlYkdMLT5zZXRDaGVja2FibGUodHJ1ZSk7
CisgICAgdG9nZ2xlV2ViR0wtPnNldENoZWNrZWQoZmFsc2UpOworCiAgICAgUUFjdGlvbiogdG9n
Z2xlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IGdyYXBoaWNzVmlld01lbnUtPmFkZEFjdGlvbigi
VG9nZ2xlIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nIiwgdGhpcywgU0xPVCh0b2dnbGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKGJvb2wpKSk7CiAgICAgdG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Zy0+c2V0Q2hlY2thYmxlKHRydWUpOwogICAgIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmct
PnNldENoZWNrZWQoZmFsc2UpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>